2017-10-21 64 views
-3

當我提交時,此代碼需要5秒鐘才能運行。我應該怎樣做才能獲得更好的表現?首先我使用了file_gets_content,但花費了更多時間。 我分裂的名字,因爲我需要名字和姓氏將其添加到網址。網址=網址+姓氏+名字。獲取JSON的值需要很長時間

<form method='post' action='index.php'> 
    <input type='submit' name='submit'> 
</form> 

<?php 

    /* This is how the URL should look like 
    // $url = "http://api.suredbits.com/nfl/v0/stats/wagner/bobby"; 
    */ 
    $url = "http://api.suredbits.com/nfl/v0/stats/"; 

    if(isset($_POST['submit'])) { 
    $names = array(); 
    array_push($names, 'Bobby Wagner', 'Zach Brown', 'Mason Foster', 
        'Preston Smith', 'Josh Norman', 'Ryan Kerrigan', 
        'Earl Thomas', 'Richard Sherman', 'Chandler Jones', 
        'Marcus Peters'); 

    foreach($names as $n) { 
     $split_name = explode(" ", $n); 

     $url .= $split_name[1] . '/' . $split_name[0]; 

     //get json 
     $data = loadFile($url); 
     $json_data = json_decode($data, true); 

     echo $n . ' Tackles: ' . $json_data[0]["defense"]["tackle"]; 

     //reset url 
     $url = "http://api.suredbits.com/nfl/v0/stats/"; 

    } 


    } 

    function loadFile($url) { 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 

    $data = curl_exec($ch); 
    curl_close($ch); 

    return $data; 
    } 
?> 
+0

您正在做10個查詢...這是需要時間。嘗試手動執行單個查詢(瀏覽器或終端)以檢查響應時間如此長的原因。 –

+0

單個查詢甚至不需要一秒鐘。但我需要多個查詢,因爲我想呈現多個玩家。也許使用AJAX加載可以幫助? – Err404r

回答

1

首先在PHP你正在做外部請求,這意味着在默認情況下你把它捆起來需要爲目標服務器迴應你的時間。然後你實際上爲每個名字做一個請求。這取決於你的連接。

以防萬一,我已經測試你的代碼(僅適用於PHP的一部分),因爲它可以在這裏看到:http://sandbox.onlinephpfunctions.com/code/139050ebc5d12236ab5fa32165943ca4de027672

這是結果:

Start (3.504753112793E-5) 

Before request to Bobby Wagner (4.7922134399414E-5) 
After request to Bobby Wagner (0.44589018821716) 

Before request to Zach Brown (3.0994415283203E-5) 
After request to Zach Brown (0.48834991455078) 

Before request to Mason Foster (4.6968460083008E-5) 
After request to Mason Foster (0.45868515968323) 

Before request to Preston Smith (3.6001205444336E-5) 
After request to Preston Smith (0.4740629196167) 

Before request to Josh Norman (4.2915344238281E-5) 
After request to Josh Norman (0.45651292800903) 

Before request to Ryan Kerrigan (4.1007995605469E-5) 
After request to Ryan Kerrigan (0.46689486503601) 

Before request to Earl Thomas (4.0054321289062E-5) 
After request to Earl Thomas (0.45992112159729) 

Before request to Richard Sherman (4.1007995605469E-5) 
After request to Richard Sherman (0.44616389274597) 

Before request to Chandler Jones (4.4107437133789E-5) 
After request to Chandler Jones (0.51626300811768) 

Before request to Marcus Peters (4.1007995605469E-5) 
After request to Marcus Peters (0.46067094802856) 

Total (4.6739158630371) 

這裏你可以看到每個請求需要大約半秒。 這是問題,唯一的解決方法是,如果您可以更改目標服務/服務器,請允許一個名稱的列表1 ... 1 ...

+0

Ty。正如你所說,我發現一個新的API列表,現在工作正常。 – Err404r