PHPでcurlを巧みに使用してサードパーティのWebコンテンツの取得時間を短縮
3367 ワード
前言:
私达のふだんのプログラムの中でどうしてもいくつかのインタフェースに同时にアクセスする情况が现れて、ふだん私达はcurlでアクセスする时、普通はすべて単一で、顺番にアクセスして、もし3つのインタフェースがあって、1つのインタフェースごとに500ミリ秒を费やして、私达の3つのインタフェースは1500ミリ秒を费やして、この问题はとても头が痛くてページのアクセス速度に深刻な影响を及ぼしました同時にアクセスして速度を上げる可能性はありますか?今日は簡単に言えば、curl同時利用でページアクセス速度を向上させるので、ご指導をお願いします.
1、古いcurlアクセス方式及び消費時間統計
時間:0.614秒
2、curl同時アクセス方式及び消費時間統計
消費時間:0.316秒かっこいいでしょうページ全体がバックエンドインタフェースにアクセスする時間を半分節約しました
私达のふだんのプログラムの中でどうしてもいくつかのインタフェースに同时にアクセスする情况が现れて、ふだん私达はcurlでアクセスする时、普通はすべて単一で、顺番にアクセスして、もし3つのインタフェースがあって、1つのインタフェースごとに500ミリ秒を费やして、私达の3つのインタフェースは1500ミリ秒を费やして、この问题はとても头が痛くてページのアクセス速度に深刻な影响を及ぼしました同時にアクセスして速度を上げる可能性はありますか?今日は簡単に言えば、curl同時利用でページアクセス速度を向上させるので、ご指導をお願いします.
1、古いcurlアクセス方式及び消費時間統計
0) {
$data = false;
}
curl_close($ch);
return $data;
}
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$url_arr=array(
"taobao"=>"http://www.taobao.com",
"sohu"=>"http://www.sohu.com",
"lai18"=>"http://www.lai18.com",
);
$time_start = microtime_float();
$data=array();
foreach ($url_arr as $key=>$val)
{
$data[$key]=curl_fetch($val);
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo " :{$time}";
?>
時間:0.614秒
2、curl同時アクセス方式及び消費時間統計
$url) {
$timeout=2;
$ch[$nch] = curl_init();
curl_setopt_array($ch[$nch], array(
CURLOPT_URL => $url,
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => $timeout,
));
curl_multi_add_handle($mh, $ch[$nch]);
++$nch;
}
/* wait for performing request */
do {
$mrc = curl_multi_exec($mh, $running);
} while (CURLM_CALL_MULTI_PERFORM == $mrc);
while ($running && $mrc == CURLM_OK) {
// wait for network
if (curl_multi_select($mh, 0.5) > -1) {
// pull in new data;
do {
$mrc = curl_multi_exec($mh, $running);
} while (CURLM_CALL_MULTI_PERFORM == $mrc);
}
}
if ($mrc != CURLM_OK) {
error_log("CURL Data Error");
}
/* get data */
$nch = 0;
foreach ($urlarr as $moudle=>$node) {
if (($err = curl_error($ch[$nch])) == '') {
$res[$nch]=curl_multi_getcontent($ch[$nch]);
$result[$moudle]=$res[$nch];
}
else
{
error_log("curl error");
}
curl_multi_remove_handle($mh,$ch[$nch]);
curl_close($ch[$nch]);
++$nch;
}
curl_multi_close($mh);
return $result;
}
$url_arr=array(
"taobao"=>"http://www.taobao.com",
"sohu"=>"http://www.sohu.com",
"lai18"=>"http://www.lai18.com",
);
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
$data=curl_multi_fetch($url_arr);
$time_end = microtime_float();
$time = $time_end - $time_start;
echo " :{$time}";
?>
消費時間:0.316秒かっこいいでしょうページ全体がバックエンドインタフェースにアクセスする時間を半分節約しました