1. Advertising
    y u no do it?

    Advertising (learn more)

    Advertise virtually anything here, with CPM banner ads, CPM email ads and CPC contextual links. You can target relevant areas of the site and show ads based on geographical location of the user if you wish.

    Starts at just $1 per CPM or $0.10 per CPC.

Localhost PHP Loading Speed Very Slow

Discussion in 'PHP' started by Frenzyy, Feb 18, 2018.

  1. #1
    Some people have mentioned to me that my site is quite inefficient and given that it's taking ~17secs to load now, I'd like to change that but I've no idea how. I've tried Gzip to compress it but it didn't help. I got rid of some "" and have used '' instead as well as got rid of some html blank spaces but that's about it. Below is most of my code, excluding some JS to save space. Either way, when I do F12 on my site, Google shows that it's the php file itself that takes so long to load, not JS so that's why I'm just showing that below. It's just this one page that's loading slowly, all others sites are very quick. I'd love some tips on how to make this more efficient. Thank you!
    
        <?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>   
    Code (markup):

     
    Solved! View solution.
    Frenzyy, Feb 18, 2018 IP
  2. qwikad.com

    qwikad.com Illustrious Member Affiliate Manager

    Messages:
    7,151
    Likes Received:
    1,656
    Best Answers:
    29
    Trophy Points:
    475
    #2
    You're using multiple api calls. Depending on how much javascript/jquery they have to load, it can significantly delay your page load. At least, something you should look into. Remove all the api links, then check if it starts loading faster.
     
    qwikad.com, Feb 18, 2018 IP
  3. Frenzyy

    Frenzyy Peon

    Messages:
    16
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    1
    #3
    Thanks for the idea. It does look like the marketdata API is what's causing the slow down. Is there any way to make this faster or not really?
     
    Frenzyy, Feb 18, 2018 IP
  4. #4
    You can try to call them asynchronously (each file_get_contents). It may speed it up somewhat. Or you can show a progress bar with the message "Data is being retrieved. Please wait." until everything is loaded. Still, even if you reduce the page load to 10 seconds, it will still be too long. You need to find a long term solution.
     
    qwikad.com, Feb 18, 2018 IP
  5. RomanEpo

    RomanEpo Active Member

    Messages:
    127
    Likes Received:
    6
    Best Answers:
    0
    Trophy Points:
    78
    #5
    Optimize your calling code.
    Trace your specific script from help of developer tools. Check calling method , is it direct calling from code or via server ,than optimize it.
     
    RomanEpo, Feb 18, 2018 IP
  6. Blizzardofozz

    Blizzardofozz Well-Known Member

    Messages:
    132
    Likes Received:
    9
    Best Answers:
    1
    Trophy Points:
    118
    #6
    If possible you could test each API call one by one. So you could see where is the most time-consuming task. You could load slowest parts with ajax after page load.
     
    Blizzardofozz, Feb 20, 2018 IP