page_adsence

2011年5月6日金曜日

globとopendirの速度に関して

glob vs opendirで速度を検証しているサイトがあった。
最近はglobって便利だし、opendirよりすっきりするからいいなーと思って結構使っていたのですが、
ベンチマークとってるサイトみると、opendirの方が早いみたいですね。

で、試しにソースをコピって自分のVMWare上でベンチマーク取ってみたのですが、

「あれ、globの方が早くね?」

ファイル数の問題かも知れないですが、1K程のcsvを150ファイル程置いて試してみたところ
平均的にはglobの方が早かったです。
requireしてるファイルの容量は関係ないと思うんで、
やっぱファイル数かな。
150ファイルって結構多いと思うんですが、
何ファイルだったらopendirの方が早くなるのかなー。
暇な時にその辺もベンチ取れたらなーと思います。
つっても、opendirよりglobの方が綺麗に書けるから、
自分的にはglob推奨していこうと思います。

ベンチ取ったソースは下記の通り。
<?php

//Waste a little time to offset PHP's startup.
for($i=0; $i<20; $i++) { 
    print ' '; 
}

$start_time = time()+microtime(true);

ob_start();
for($x=0; $x < 20; $x++) {
    $dir = 'cache/';
    if (is_dir($dir)) {
        if ($dh = opendir($dir)) {
            while (($file = readdir($dh)) !== false) {
                //Include the file 
                include($file);
            }
            closedir($dh);
        }
    }
}
ob_end_clean();

print ((time()+microtime(true)) - $start_time). ' (opendir time)<br />';


$start_time = time()+microtime(true);

ob_start();
for($x=0; $x < 20; $x++) {
    //Include the function files
    foreach (glob("cache/*.html") as $file) {
        //Include the file 
        include($file);
    }
}
ob_end_clean();

print ((time()+microtime(true)) - $start_time). ' (glob time)<br />';
?>