cURLの挙動について調査 –file_get_contents()との比較-

ある案件で調査している時に、サンプルのコードの中でcURLが使用されていました。ほぼコピペでしか使ったことが無かったので、試しにコードを書いて、ついでにfile_get_contents()との比較をしてみたした。

サンプル1:cURLでwebサイトのhtmlを取得

元のコード:PHP の cURL モジュールを使用して example.com のホームページを取得する

元コードを実行すると、アクセス時のヘッダーも取得しているので削除。ベンチマーク用にmicrotimeを仕込んだり、メモリ使用量出したり、10回試行して平均タイムを出したり。

実行するとHTMLをそのままファイルに取得します。


<?php
for($loop = 0;$loop < 10; $loop++){
$mark['start'] = microtime(TRUE);

// cURL
$ch = curl_init('http://hoge.com/');

//実行ファイルのtmp/以下にファイル保存
$fp = fopen('tmp/hoge_curl_'.$loop, 'w');

//書込み
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);

curl_close($ch);

fclose($fp);
$mark['end'] = microtime(TRUE);

// Benchmark
$BM[$loop] = $mark['end']-$mark['start'];
echo 'use time : '.$BM[$loop]."<br />";
echo 'memory usage : '.memory_get_usage()."<br /><br />";
}

$average = 0;
foreach($BM as $val){
$average += $val;
}
echo 'use time average : '.$average / $loop. '<br />';
echo 'memory peak usage : '.memory_get_peak_usage();

//end of file

サンプル2:サンプル1をfile_get_contents()に置き換え


<?php
for($loop = 0;$loop < 10;$loop++){
$mark['start'] = microtime(TRUE);
//この辺が違う
$ch = file_get_contents('http://hogehoge.com/');

//実行ファイルのtmp/以下にファイル保存
$fp = fopen('tmp/hoge_fileget_'.$loop, 'w');
//書込み。同じようなコードにしたいからロックしない。
fwrite($fp, $ch);
fclose($fp);
$mark['end'] = microtime(TRUE);

// Benchmark
$BM[$loop] = $mark['end']-$mark['start'];
echo 'use_time : '.$BM[$loop]."<br />";
echo 'memory usage : '.memory_get_usage().'<br /><br />';
}

$average = 0;
foreach($BM as $val){
$average += $val;
}
echo 'use time average : '.$average / $loop ."<br />";
echo 'memory peak usage : '. memory_get_peak_usage();

//end of file

テスト結果

さくらのスタンダードプランに設置して検証を行いました。

Apach : 1.3.42
PHP : 5.2.14

cURL使用:

対象:http://www.e2esound.com/ (CodeIgniter、同一サーバー上)

use time average : 1.0531941175461
memory peak usage : 58152

・対象:http://www.terashima-kaihatsu.co.jp/ (静的サイト、実家)

use time average : 0.059963274002075
memory peak usage : 58032

・対象:http://www.google.co.jp/

use time average : 0.079417705535889
memory peak usage : 58000

file_get_contents()使用:

対象:http://www.e2esound.com/ (CodeIgniter、同一サーバー上)

use time average : 1.1910657167435
memory peak usage : 99432

・対象:http://www.terashima-kaihatsu.co.jp/ (静的サイト、実家)

use time average : 0.17229559421539
memory peak usage : 125788

・対象:http://www.google.co.jp/

use time average : 0.08293628692627
memory peak usage : 102396

cURLがより高速で、メモリ使用量も少ないという結果になりました。

facebookで遊びながらテストしていたら、一度file_get_contents()が速いような結果が出て、アレ?アレ?ってなったんですが、冷静にまとめてみたらやっぱりcURLの方が高速でした。メモリの差が恐ろしい。。。

cURLの挙動について調査 –file_get_contents()との比較-」への1件のフィードバック

  1. ピンバック: file_get_contentsよりもcURLのほうが速かった

コメントを残す

メールアドレスが公開されることはありません。