複数リクエストの場合は
勿論、並列にリクエストを実行するcurl_multiの方が早いでしょう。curl_multiを使っての実装方法はAPIとの通信効率をよくする実装例(1) curl_multi (Yahoo!JapanのTechBlog)に詳しく載っています。
じゃあ、リクエストが1つだけの場合は?
勿論、無駄な処理のないただのcURLの方が早いでしょう。それは分かるけどどれくらいの差があるのでしょうか?
実験してみます。
PHPは5.2.5です。
ただのcURL場合
以下のプログラム(抜粋ですが)を10回試行して平均を取ってみます。$url = "http://www.yahoo.co.jp/"; $start = microtime(); $res = my_curl($url); if($res["info"]["http_code"] == 200){ print("success"); }else{ print("error"); } $end = microtime(); function my_curl($url){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $res = curl_exec($ch); $info = curl_getinfo($ch); return array("res" => $res, "info" => $info); }
平均すると0.1679922秒かかりました。
curl_multiの場合
同じく、以下のプログラム(抜粋ですが)を10回試行して平均を取ってみます。$url = "http://www.yahoo.co.jp/"; $start = microtime(); $res = my_curl_multi(array($url)); if($res[0]["info"]["http_code"] == 200){ print("success"); }else{ print("error"); } $end = microtime(); function my_curl_multi($urls){ $mh = curl_multi_init(); $chs = array(); foreach($urls as $url){ $ch = curl_init($url); $chs[] = $ch; curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_multi_add_handle($mh, $ch); } do{ curl_multi_exec($mh, $running); }while($running); $res = array(); foreach($chs as $ch){ $info = curl_getinfo($ch); $body = curl_multi_getcontent($ch); curl_multi_remove_handle($mh, $ch); curl_close($ch); $res[] = array("res" => $body, "info" => $info); } curl_multi_close($mh); return $res; }
平均すると0.300859秒かかりました。
まとめ
秒数自体は通信環境に因るところが大きいと思うので参考程度に…ですが、それにしてもコンマ数秒のオーダーで違ってきています。並列処理をする必要がない場合は、極力通常のcURLを使用するのがよさそうです。
0 件のコメント:
コメントを投稿