Отображение стоимости портфеля акций


Некоторые люди сказали мне, что мой сайт является довольно неэффективным и учитывая, что это занимает ~17secs сейчас нагрузки, я хотел бы изменить это, но я понятия не имею как. Я пробовал gzip, чтобы сжать его, но это не помогло. Я избавился от некоторых двойные кавычки (т. е. "") и использовали одинарные кавычки (т. е. '') вместо, а также избавился от некоторых HTML-пробелы, но это о нем.

Вот большинство моих код, за исключением некоторых JS, чтобы сохранить пространство. В любом случае, когда я открываю консоль разработчика в Google Chrome на моем сайте, он показывает, что это сам PHP файл, который занимает так много времени, чтобы загрузить, а не на JS, поэтому я просто показываю, что ниже. Это просто одна страница, которая загружается медленно, все остальные сайты очень быстро. Я хотел бы некоторые советы о том, как сделать это более эффективно.

<?php
    require('includes/connection.php');
    require('includes/config.php'); 
        // Page name
    $title = 'Portfolio';
    // Include the header template
    require('layout/header.php'); 

    // If for some reason, not logged in then redirect to login page
    if(!$user->is_logged_in()){ header('Location: login.php'); exit(); }
?> 
<div>
    <h2><?php echo htmlspecialchars($_SESSION['username'], ENT_QUOTES); ?></h2>
    <button id="opener" class='btn btn-success' >Advanced Company Data</button>
    <div id="dialog" title="Advanced Company Data"><a href="http://www.nasdaq.com/symbol/aapl">Exchange Information</a>
    </div>
    </div>
    <script>
        $("#dialog").dialog({
            autoOpen: false
        });
        $("#opener").click(function() {
            $("#dialog").dialog("open", "modal", true );
        });
    </script>
    </div>
<?php
    $spy = file_get_contents('https://api.iextrading.com/1.0/stock/spy/stats/year1ChangePercent');  
    $spy = json_decode($spy,TRUE); 
    // Initialising variables to store extracted information
    $name = [];
    $symbol = [];
    $open = [];
    $close = [];
    $high = [];
    $low = [];
    $lastprice = [];
    $y = 0;
    $z = '';
    $key = '93dcc722279c3a7577f248b09ef6167f';

    // Retreiving information from database
    $memberid = $_SESSION['memberID'];
    $sql = "SELECT * FROM portfolio WHERE memberID = $memberid";
    $result = mysqli_query($conn, $sql);

    // Check if databse is empty
    if (mysqli_num_rows($result) > 0) 
    {
        while($row = mysqli_fetch_assoc($result)) 
        {
            $sym[$y] = $row['stocks_symbol'];
            $pri[$y] = $row['price'];
            $vol[$y] = $row['quantity'];
            $id[$y] = $row['memberid'];
            $y += 1;
        }
    }
    // If database empty
    else 
    {
        echo 'Portfolio Empty';
        die();
    }
    mysqli_close($conn);

    // Adding all stock names in one variable to enable API call
    for($a=0;$a<$y;$a++)
    {
        $z = $z.$sym[$a].',';
    }
    $z = rtrim($z,',');

    // API call
    $contents = file_get_contents("http://marketdata.websol.barchart.com/getQuote.json?key=$key&symbols=$z&mode=R");
    $contents = json_decode($contents, true);
    // Check successfull API call
    if($contents['status']['code'] == 200) 
    {
        foreach($contents['results'] as $result) 
        {
            array_push($name,$result['name']);
            array_push($symbol,$result['symbol']);
            array_push($open,$result['open']);
            array_push($close,$result['close']);
            array_push($high,$result['high']);
            array_push($low,$result['low']);
            array_push($lastprice,$result['lastPrice']);
        }
    }        
    // If API call unsuccessful
    else 
    {   
        echo 'Error retreiving data. Please try again later.';
        die();
    }
?>
<!-- Generating Output in tabular format -->
<table id= test class='table table-responsive'>
    <tr class='head warning'>
        <th>Name</th>
        <th>Symbol</th>
        <th>Open</th>
        <th>Close</th>
        <th>High</th>
        <th>Low</th>
        <th>Last Price</th>
        <th>Price Bought</th>
        <th>Quantity</th>
        <th>Change Per Stock</th>
        <th>Profit/Loss</th>
        <th>Amount Invested</th>
        <th>Current Market Value</th>
        <th>Dividend</th>
        <th>Total Dividend</th>
        <th>Company Description</th>
        <th>Latest News</th>
    </tr>
    <?php
    $profitOrLossSum = 0;
    $dividendRateSum = 0;
    $startEqSum = 0;
    $sumOf = array();
    $pnl = array();

        for($x=0;$x<$y;$x++) 
        {?>
            <tr>
                <td class="input"><?php echo $name[$x]; ?></td>
                <td class="input"><?php echo $symbol[$x]; ?></td>
                <td class="input"><?php echo $open[$x]; ?></td>
                <td class="input"><?php echo $close[$x]; ?></td>
                <td class="input"><?php echo $high[$x]; ?></td>
                <td class="input"><?php echo $low[$x]; ?></td>
                <td class="input"><?php echo $lastprice[$x]; ?></td>
                <td class="input"><?php echo $pri[$x]; ?></td>
                <td class="input"><?php echo $vol[$x]; ?></td>
                <td class="input"><?php 
                    if($pri[$x] > $lastprice[$x]) 
                    {
                        echo $lastprice[$x]-$pri[$x];
                    }
                    else if($pri[$x] < $lastprice[$x]) 
                    {
                        echo $lastprice[$x]-$pri[$x];
                    }
                    else
                        echo '0';
                    ?></td>
                <td class="input"><b><?php 
                    $profitOrLoss = ($lastprice[$x]-$pri[$x]) * $vol[$x];
                    $profitOrLossSum += $profitOrLoss;
                    $pnl[] = $profitOrLoss;
                    echo $profitOrLoss;
                    ?></b></td>
                <td><?php 
                    $starteq = $pri[$x] * $vol[$x];
                    $startEqSum += $starteq;
                    echo $starteq;
                    ?></td>
                <td><b><?php
                    $firstno1  = floatval($vol[$x]);
                    $secondno1 = floatval($lastprice[$x]);
                    $sumOf[] = $firstno1 * $secondno1;
                    $sum1 = $firstno1 * $secondno1;
                    echo ($sum1);
                    ?>
                    </b></td>
                <td><?php 
                    $div = file_get_contents("https://api.iextrading.com/1.0/stock/market/batch?symbols=$symbol[$x]&types=stats&filter=dividendRate");  
                    $div = json_decode($div,TRUE);  
                    $sum = 0;
                    foreach($div as $divi => $value) {
                    echo $value['stats']['dividendRate']; 
                    $sum += (floatval($vol[$x]) + floatval($value['stats']['dividendRate']));
                     } 
                     ?></td>
                <td><?php 
                    $firstno  = floatval($vol[$x]);
                    $secondno = floatval($value['stats']['dividendRate']);
                    $sum2 = 0;
                    $sum2 += $firstno * $secondno;
                    echo ($sum2);
                    $dividendRateSum += $sum2;
                    ?></td>
                <td class="input"><?php
                        $desc = file_get_contents("https://api.iextrading.com/1.0/stock/market/batch?symbols=$symbol[$x]&types=company&filter=description");  
                        $desc = json_decode($desc,TRUE); 
                        foreach($desc as $desc => $des) {
                        echo $des['company']['description'];
                        }
                     ?></td>
                <td><?php
                    $desc1 = file_get_contents("https://api.iextrading.com/1.0/stock/market/batch?symbols=$symbol[$x]&types=news&filter=headline,url&range=1m&last=1");  
                    $desc1 = json_decode($desc1,TRUE); 
                    foreach($desc1 as $key111 => $des1) {
                    echo implode(PHP_EOL, array_column($des1['news'],'headline'));
                    ?><br><?php $link = implode(PHP_EOL, array_column($des1['news'],'url'));
                    echo '<a href="'.$link.'">Link</a>';
                    } 
                    ?></td>
            </tr>
            <?php 
        }
    $arr = array('profitOrLossSum' => $profitOrLossSum, 'dividendRateSum' => $dividendRateSum);
    $arr1 = array('startEqSum' => $startEqSum);     
    $array = array_combine($name, $sumOf);
    $array10 = array_combine($name, $pnl);
?>
</table>

<h3> SPY %YTD= <?php echo $spy1 = number_format($spy *100, 2); ?>%</h3>
    <br>
        <h3> Starting Equity= $<?php echo $startEqSum; ?></h3>
        <h3> Current Equity= $<?php echo $profitOrLossSum; ?></h3>
        <h3> Total Profit= $<?php echo $profitOrLossSum - $startEqSum; ?></h3>
        <h3> % Gain/Loss= <?php echo $gain = number_format((($profitOrLossSum - $startEqSum) / $startEqSum) * 100, 2); ?>%</h3>
        <h3> Total Dividend= $<?php echo $dividendRateSum / 4; ?>/Quarter</h3>
        <h3> Portfolio vs SPY= <?php echo $gain-$spy1; ?>%</h3><br>
</body>


185
-1
задан 18 февраля 2018 в 04:02 Источник Поделиться
Комментарии
1 ответ

Вы должны скопировать страницу и написать время, необходимое для всех файл-получить-содержание и запроса. Так вы будете знать, куда прийти, что это очень медленно.
Сколько людей его используют? Как много людей используют свой сервер? Если слишком много, он насыщенный и очень-очень медленно : изменить ваш сервер или подключение к интернету или оптимизировать код.
Следующий использовать Эхо, чтобы написать текст, это быстрее, чем останавливает сценарий и вернется.
Лучше переделать SQL-запрос вместо скачивания файла. Вы также можете кэшировать в итоге наиболее используемых запросов в новой таблице базы данных.
Если с помощью тега script, вы всегда должны информировать, что это язык.
Если вы используете только один раз в сессии переменную, это быстрее, чтобы не сохранить ее в переменной.
Если вам просто нужно, чтобы отобразить значение только Дон t сохранить его в массив сначала, но на момент выполнения запроса.
Предпочитают использовать переменную вместо массива это быстрее.

0
ответ дан 18 февраля 2018 в 09:02 Источник Поделиться