我有一个门户网站,需要下载许多单独的json文件并以某种形式的视图显示其内容。我的意思是最少要32个单独的文件。
我尝试了cUrl的蛮力迭代,耗时约12.5秒。
我尝试了curl_multi_exec,如此处http://www.php.net/manual/en/function.curl-multi-init.php所示,其功能如下,耗时约9秒钟。好一点,但仍然非常慢。
function multiple_threads_request($nodes){
$mh = curl_multi_init();
$curl_array = array();
foreach($nodes as $i => $url)
{
$curl_array[$i] = curl_init($url);
curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $curl_array[$i]);
}
$running = NULL;
do {
curl_multi_exec($mh,$running);
} while($running > 0);
$res = array();
foreach($nodes as $i => $url)
{
$res[$url] = curl_multi_getcontent($curl_array[$i]);
}
foreach($nodes as $i => $url){
curl_multi_remove_handle($mh, $curl_array[$i]);
}
curl_multi_close($mh);
return $res;
}
我意识到这是一项天生的昂贵操作,但是有人知道其他任何方法可能会更快吗?
编辑:最终,我的系统限制了curl_multi_exec并将代码移至生产机器中看到了显着的改进
您绝对应该考虑对您的cURL进行基准测试,以查看哪个速度下降,但是对于评论来说这太长了,所以请告诉我它是否有帮助:
// revert to "cURLing with brute force iteration" as you described it :)
$curl_timer = array();
foreach($curlsite as $row)
{
$start = microtime(true);
/**
* curl code
*/
$curl_timer[] = (microtime(true)-$start);
}
echo '<pre>'.print_r($curl_timer, true).'</pre>';
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句