【问题标题】:Improving cURL performance (PHP Library)提高 cURL 性能(PHP 库)
【发布时间】:2010-10-10 04:57:17
【问题描述】:

这里是我在做什么的简要概述,真的很简单:

  • 从数据库表中取出记录。
  • 遍历所有这些记录,并为包含 URL 的每一列输出(使用 cURL)并确保 URL 仍然有效。
  • 对于每条记录,都会使用当前时间戳更新列,指示上次检查的时间以及发生其他一些数据库处理的时间。

无论如何,这一切都运作良好,并且完全符合预期。问题是我认为就我如何使用 cURL 验证 URL 而言,性能可以大大提高。

这是我的代码的简短(过度简化)摘录,演示了如何使用 cURL:

$ch = curl_init();
while($dbo = pg_fetch_object($dbres))
{
   // for each iteration set url to db record url
   curl_setopt($ch, CURLOPT_URL, $dbo->url);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_exec($ch); // perform a cURL session
   $ihttp_code = intval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
   // do checks on $ihttp_code and update db
}
// do other stuff here
curl_close($ch);

如您所见,我一直在重复使用相同的 cURL 句柄,但即使我去掉所有处理(数据库或其他),脚本仍然需要非常长的时间才能运行。更改任何 cURL 选项是否有助于提高性能?调整超时值/等?任何意见将不胜感激。

谢谢,

  • 尼古拉斯

【问题讨论】:

    标签: php curl performance


    【解决方案1】:

    将 CURLOPT_NOBODY 设置为 1(请参阅 curl documentation)告诉 curl 不要询问响应的正文。这将联系 Web 服务器并发出 HEAD 请求。响应代码会告诉您 URL 是否有效,并且不会将大量数据传回。

    如果这仍然太慢,那么通过运行 N 个线程(或进程),每个线程(或进程)执行 1/N 的工作,您可能会看到巨大的改进。瓶颈可能不在您的代码中,而在远程服务器的响应时间中。如果它们响应缓慢,那么您的循环将运行缓慢。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 2010-12-02
    • 2017-08-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多