simplexml_load_fileとsimplexml_load_stringの速度比較
外部サイトのRSSを読む処理をする際に専用の関数simplexml_load_fileを使っていた。
混雑するサイトを考慮してタイムアウト時間、待機時間、再試行回数を含めた関数を作った。
function h_simplexml_load_file($url,$timeout=3,$delay=1,$repeat=5) {
ini_set('default_socket_timeout',$timeout);
for ($i = 0; !($rss = @simplexml_load_file($url)) && $i < $repeat; ++$i) {
sleep($delay);
if ($i == $repeat-1) {
return false;
}
}
return $rss;
}
ふと、simplexml_load_fileとfile_get_contentsしてからsimplexml_load_stringするのってどっちが早いのだろうと考え試してみた。
function h_simplexml_load_file2($url,$timeout=3,$delay=1,$repeat=5) {
if (!($buffer = h_file_get_contents($url,$timeout,$delay,$repeat))) return false;
if (!($rss = @simplexml_load_string($buffer))) return false;
return $rss;
}
function h_file_get_contents($url,$timeout=3,$delay=1,$repeat=5) {
ini_set('default_socket_timeout',$timeout);
for ($i = 0; !($rss = @file_get_contents($url)) && $i < $repeat; ++$i) {
sleep($delay);
if ($i == $repeat-1) {
return false;
}
}
return $rss;
}
適当に某人気アイドルグループのブログ52サイトで調査してみた。
h_simplexml_load_file(simplexml_load_file)
1回目:44.2637
2回目:44.1838
3回目:44.4204
h_simplexml_load_file2(file_get_contentsしてからsimplexml_load_string)
1回目:38.863
2回目:38.7857
3回目:39.8881
意外な事にfile_get_contentsしてからsimplexml_load_stringの方が早かった。