PHPでスクリプトの処理、実行時間を計測する

By katou - 08/10/13 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

携帯サイトだけに限りませんが、

PHPのロジックの問題で

「特定の画面を表示するまでにかなり時間が掛かる。」など

どの部分のロジックが負荷の高い処理になっているのかを見付けて改善する必要があると思います。

改善すべき場所を発見するために、今回はmicrotime関数をご紹介致します。

PHP5からは、microtimeの引数にtrueを入れることで、結果を float (秒単位) で返してくれます。

$time_start = microtime(true);

for( $i=0; $i<1000; $i++ ){
    $str .="$i回";
}

$time_end = microtime(true);
$time = $time_end - $time_start;

echo "$time秒掛かりました。";

PHPの実行環境にPEARのBenchmarkパッケージがインストールされているのであれば、
より詳しくベンチマークを表示することが出来ます。


require_once("Benchmark/Timer.php");

$timer = new Benchmark_Timer;
$timer->start();
$timer->setMarker(開始);

$timer->setMarker(一つ目のマーカー);
for($i=0; $i<10000; $i++){
    $str .="test";
}

$timer->setMarker(二つ目のマーカー);
for($i=0; $i<10000; $i++){
    $str .='test';
}

$timer->stop();
$timer->display();

とすることで、下記のようなテーブルが返されます。
$timer->display(true);とすれば、更に詳しい結果が表示され、
$timer->display(true,"表示形式");表示形式をplainまたはhtmlを指定することが出来ますが、
今回は簡単にご紹介致します。

下記の値は、一例になりますが、下記テーブルの見方としては
・各マーカーに到達するまでの経過時間(time index)
・前のマーカーから次マーカーに達するまでに要した時間(ex time)
・総時間に対するex timeの割合(%)となります。

  time index ex time %
Start 1223900101.39052300 - 0.00%
開始 1223900101.39055200 2.9087066650391E-05 0.51%
一つ目のマーカー 1223900101.39056700 1.5020370483398E-05 0.27%
二つ目のマーカー 1223900101.39337600 0.0028090476989746 49.65%
Stop 1223900101.39618100 0.0028049945831299 49.57%
total - 0.0056581497192383 100.00%

上記のような処理では、大差の無い結果になりましたが、

ベンチマークを測る場合、PEARのBenchmarkパッケージに含まれるクラスは大変便利です。