simplexml_load_fileとsimplexml_load_stringの速度比較

xmlspeed_s

外部サイトの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の方が早かった。

Tags: ,

トラックバック

コメントを書く