【问题标题】:Getting values of JSON takes too long获取 JSON 的值需要很长时间
【发布时间】:2017-10-21 17:22:09
【问题描述】:

当我提交时,此代码需要 5 秒才能运行。我应该怎么做才能获得更好的表现?首先,我使用了 file_gets_content,但这需要更多时间。 我拆分名称,因为我需要名字和姓氏才能将其添加到 url。 URL = URL + 姓氏 + 名字。

<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;
  }
?>

【问题讨论】:

  • 您正在执行 10 次查询...这需要时间。尝试手动执行单个查询(浏览器或终端)以检查为什么响应时间如此之长。
  • 单个查询甚至不需要一秒钟。但我确实需要多个查询,因为我想展示多个玩家。也许使用 AJAX 加载会有所帮助?

标签: php json api


【解决方案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...

【讨论】:

  • 泰。正如你所说,我找到了一个带有列表的新 api,现在可以正常工作。
猜你喜欢
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
相关资源
最近更新 更多