2017-10-21 63 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