【问题标题】:using curl within foreach loop optimization?在 foreach 循环优化中使用 curl?
【发布时间】:2013-01-03 13:36:23
【问题描述】:

如果我在 foreach 循环中使用 curl,这是不好的做法还是会变慢?

我打算有一个自动完成输入字段,输入中的查询将被发送到 API 调用。

我从某个链接获取了一个 ID(即:http://api.linke1.com/names

foreach($json as j){

    $id = $j->id; //from http://api.linke1.com/names

    $url = "https://api.site/{$id}/photos";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $output = curl_exec($ch);
    curl_close($ch);    

    $jsonDecode = json_decode($output);
    $results = $jsonDecode->results;
    foreach($results as $result)
    {   
            $photoURL= $result->photo->url; //from https://api.site/{$id}/photos
    }
}

所以每次我输入名字时,它都会进入 foreach 从http://api.linke1.com/names 中搜索一个 id,然后它会从另一个链接中查找照片 url。我想输出一个数组列表,所以最终我会有一个数据列表来输出显示名称、照片等信息...

这是否会显着减慢,因为在输入字段中键入的每个字母都会通过这个 foreach 循环运行。有没有更简单的方法?

谢谢!

【问题讨论】:

  • 有没有办法在一个请求中检索所有这些信息?作为一般规则,在循环中执行昂贵的操作(并且通过互联网请求数据绝对是一个昂贵的操作)是一个坏主意。
  • 您问题中的循环看起来是多余的。您最好通过不使用外部 foreach 来优化它。内部 foreach 看起来也很可疑,您可能想在第一次迭代中将其破坏。除此之外,请只询问具体问题而不是假设问题。是的,它可能是错误的,但是现在看起来,它甚至不起作用。先让它工作,然后优化它。
  • 你想到了什么?

标签: php optimization curl


【解决方案1】:

初始化curl和循环前不改变的东西,然后关闭循环。

这会加快速度。

您可以使用 curl_multi_*,它可以并行获取多个 URL。

http://se2.php.net/manual/en/ref.curl.php

【讨论】:

  • 另外,他可以只使用file_get_contents(),因为这是一个简单的 GET 请求。
  • @xbonez curl-request 更快。
  • 嗯,真的吗?没有意识到这一点。
  • @xbonez 是的,他们在这里解决了这个问题:stackoverflow.com/questions/555523/…
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多