以下是我正在做的事情的简要概述,它非常简单:
无论如何,这一切都运作得很好,而且完全符合预期。问题是,我认为在使用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选项有助于提高性能吗?调整超时值/等?任何意见都将不胜感激。
谢谢,
答案 0 :(得分:9)
将CURLOPT_NOBODY设置为1(参见curl documentation)告诉curl不要询问响应的正文。这将联系Web服务器并发出HEAD请求。响应代码将告诉您URL是否有效,并且不会传回大量数据。
如果这仍然太慢,那么通过运行N个线程(或进程),每个进行1 / N的工作,你可能会看到很大的改进。瓶颈可能不在您的代码中,而是在远程服务器的响应时间内。如果它们响应缓慢,那么你的循环运行起来会很慢。