freadとfile_get_contentsの速度比較

1月 11th, 2011

最近いかに早く処理をするかという検証が多い。

今日は、タイトルのとおりfreadとfile_get_contentsで検証してみました。

結論としては、どちらでもほぼ同じ。

検証したソースは以下。

file_get_contents


<?php
$count = 1000;
$file = "/PATH/TO/ReadFile.txt";
$start = microtime(true);
for($i=0;$i<$count;$i++){
$body = @file_get_contents($file);
}
$end = microtime(true);
echo $end - $start."\n";
?>

fread


<?php
$count = 1000;
$file = "/PATH/TO/ReadFile.txt";
$start = microtime(true);
for($i=0;$i<$count;$i++){
$fp = fopen($file,'r');
flock($fp, LOCK_EX);
$body = fread($fp, filesize($file));
flock($fp, LOCK_UN);
fclose($fp);
}
$end = microtime(true);
echo $end - $start."\n";
?>

freadにはわざと排他制御を組み込みましたが、それでも「若干freadの方が早い・・・かな・・・?」程度です。

実際にかかった秒数は、読み込むファイルサイズによって大きくかわりますが、たまたま開いていたページのHTMLソース(約18kB)をローカルに保存し検証しました。

結果
file_get_contents
1回目 0.11865997314453秒
2回目 0.083765029907227秒
3回目 0.088469982147217秒

fread
1回目 0.078858852386475秒
2回目 0.088088035583496秒
3回目 0.084445953369141秒

でした。

またその読み込むファイルを1MBまで大きくして同じ検証をすると、
file_get_contents
1回目 5.7509219646454秒
2回目 5.728912115097秒
3回目 5.8219261169434秒

fread
1回目 5.6998391151428秒
2回目 5.7309768199921秒
3回目 5.7327620983124秒

となりました。

read処理でも確実に排他制御をしたい場合はfreadを使い、
プログラムが長くなるのが嫌な場合file_get_contentsで書くという程度で良さそうですね。

カテゴリー: PHP, 開発

Leave a comment

Leave a comment

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

Feed

http://blog.yume-dia.jp / freadとfile_get_contentsの速度比較