pear HTTP_RequestとHTTP_Request2の速度比較
1月 7th, 2011
httpリクエストを発行するのに、HTTP_RequestとHTTP_Request2のどちらを使うか迷ったので、私のサイトに対しリクエストを投げて速度比較をしてみました。
(特殊な事をやるつもりは一切無く、単に表示されているHTMLを取得するだけの比較です)
組んだプログラムは下記の通り。
HTTP_Request
<?php
require_once '/usr/share/pear/HTTP/Request.php';
$count = 10;
$start = microtime(true);
for($i=0;$i<$count;$i++){
$req = new HTTP_Request('http://webdev.li/');
$req->addheader('User-Agent','yume-dia crwl By php'.phpversion());
$req->addheader('Accept-Language','ja');
$req->addheader('Connection','Keep-Alive');
$req->addheader('Keep-Alive',60);
$req->addheader('allowRedirects-Alive',true);
$req->addheader('maxRedirects',3);
$req->addheader('timeout',30);
if (PEAR::isError($req->sendRequest())) {
echo "false\n";
}else{
if($req->getResponseCode() == 200){
$body = $req->getResponseBody();
}else{
echo "false\n";
}
}
}
$end = microtime(true);
echo $end - $start."\n";
?>
HTTP_Request2
<?php
require_once '/usr/share/pear/HTTP/Request2.php';
$count = 10;
$start = microtime(true);
for($i=0;$i<$count;$i++){
try{
$req = new HTTP_Request2('http://webdev.li/');
$req->setHeader('User-Agent','yume-dia crwl By php'.phpversion());
$req->setHeader('Accept-Language','ja');
$req->setHeader('Connection','Keep-Alive');
$req->setHeader('Keep-Alive',60);
$req->setHeader('allowRedirects-Alive',true);
$req->setHeader('maxRedirects',3);
$req->setHeader('timeout',30);
$response = $req->send();
if ($response->getStatus() == 200) {
$body = $response->getBody();
}else{
throw new Exception ("Server returned status: " . $response->getStatus());
}
}catch (HTTP_Request2_Exception $e) {
echo $e->getMessage();
}
catch (Exception $e) {
echo $e->getMessage();
}
}
$end = microtime(true);
echo $end - $start."\n";
?>
$countを10/100/1000に変えながら実行してみたところ、結果はこうなりました。
http_request http_request2
10回
2.298秒 3.748秒
2.248秒 3.814秒
2.282秒 3.650秒
100回
22.825秒 37.209秒
22.289秒 38.675秒
22.598秒 38.534秒
1000回
238.429秒 359.032秒
※1000回のループは1回だけにしました。
※小数点3桁以下は切り捨てています
結論として、単純にデータの取得ならHTTP_Requestの方が圧倒的に早いですね。
ただ、php 5.3以降だと
PHP Deprecated: Assigning the return value of new by reference is deprecated in /usr/share/pear/HTTP/Request.php on line 412
というエラーを大量に吐くので、
error_reporting(E_ALL & ~E_DEPRECATED);
でエラーの出力を殺すか、pearのファイル自体をいじってエラー部分を修正する必要があります。



















































