Paradigm Shift Design

ISHITOYA Kentaro's blog.

require_onceの速度

ファイル読み込みにかかる時間がどれくらいなのか,なんとなく気になったので,計測してみた.


IBM ThinkPad x60,Core2Duo1.66GHz,メモリ2G
で,1000クラスをrequire_onceするのと,全部同じファイルに落とし込んだファイルを読み込むのとどれくらい違うのか.

<?php

mesureTime("testRequire" . $argv[1]);

function mesureTime($func){
    $start = microtime(true);
    $func();
    $end = microtime(true);
    echo ($end - $start);
}

function testRequire1(){
    for($i = 0; $i < 1000; $i++){
        require_once("classes/Class$i.php");
    }
}

function testRequire2(){
    require_once("classes/All.php");
}

?>

チョー適当だけど,こんなコードで,プロパティが50個とgetter/setterが定義されているクラスを1000個,読み込んでみた.


結果,10回の平均で

testRequire1 testRequire2
2.01sec 1.33sec

でした.重い・・・.やっぱFileI/OがPHPの速度のネックだなぁ.
かためて読み込むともっと劇的に改善するかと思ったんだけど.
OptimizerとかAPCとか使えばいいんだけど,Ficusとは相性悪いしなぁ.


うーん.クラスの数を減らす方向に持っていくのが一番いいんだろうなぁ.
どうしようか.