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のファイル自体をいじってエラー部分を修正する必要があります。

wgetとfile_get_contentsも検証しました。

カテゴリー: PHP, 開発

Leave a comment

Leave a comment

コメントは承認待ちです。表示されるまでしばらく時間がかかるかもしれません。

Feed

http://blog.yume-dia.jp / pear HTTP_RequestとHTTP_Request2の速度比較