ちょっと計測したい処理があったがBenchmarkモジュール使ったことがなかったのでそのテスト
ついでに任意のところにBenchmarkモジュール持ってくるところからw
Benchmarkモジュール持ってくる
http://pear.php.net/からPackages>Benchmarking>Benchmark>Downloadの順にたどって1.2.9のリンク先URLから取得
# pwd /home/hoge/phptest/lib # wget 'http://download.pear.php.net/package/Benchmark-1.2.9.tgz' # tar zxvf Benchmark-1.2.9.tgz # ls -al drwxr-xr-x 4 hoge cam 4096 4月 12 16:51 Benchmark-1.2.9 -rw-r--r-- 1 hoge cam 8696 12月 11 2011 Benchmark-1.2.9.tgz #ls -1R Benchmark-1.2.9 Benchmark-1.2.9: Benchmark LICENSE README doc Benchmark-1.2.9/Benchmark: Iterate.php Profiler.php Timer.php Benchmark-1.2.9/doc: timer_example.php
使ってみる
もってきたやつをrequireして使ってみる
/home/hoge/phptest/benchmark_test.php
<?php # require require_once("lib/Benchmark-1.2.9/Benchmark/Timer.php"); $timer = new Benchmark_Timer; $timer->start(); $timer->setMarker('mark_A'); $loop_num = 1000; foreach ( range(1,$loop_num) as $num ){ # なんかの処理 } $timer->setMarker('mark_B'); $timer->setMarker('end'); $timer->stop(); $timer->display(); ?>
結果
# php benchmark_test.php ---------------------------------------------------- marker time index ex time perct ---------------------------------------------------- Start 1365764385.30119300 - 0.00% ---------------------------------------------------- mark_A 1365764385.30125600 6.2942504882812E-5 15.28% ---------------------------------------------------- mark_B 1365764385.30154200 0.00028610229492188 69.44% ---------------------------------------------------- end 1365764385.30157100 2.8848648071289E-5 7.00% ---------------------------------------------------- Stop 1365764385.30160500 3.4093856811523E-5 8.28% ---------------------------------------------------- total - 0.0004119873046875100.00% ----------------------------------------------------
もうちょっとためし
結果の取得(表示)の仕方がいくつかあるらしいのでそれもテスト
↑のソースの$timer->display();の部分を変えるだけ
$timer->display($showTotal, $format)
関数名の通りですね。
$showTotal…結果(列)にelapsedとperctを追加するやつ。デフォルトfalse
$format…表示のフォーマット。'auto','plain','html'があって、'auto'の場合は$_SERVER['SERVER_PROTOCOL']を見て'plain'か'html'を自動判別する。今はバッチで叩いてるので当然'plain'が入る
$timer->timeElapsed($start, $end)
任意の間隔の経過時間を取得
$startと$endは、それぞれ'start'、'stop'がデフォルトで設定されているので指定しなければそれ。
<?php ....... $timer->stop(); $elapsed1 = $timer->timeElapsed(); var_dump($elapsed1); $elapsed2 = $timer->timeElapsed('mark_A', 'end'); var_dump($elapsed2); $elapsed3 = $timer->timeElapsed('mark_A', 'END'); var_dump($elapsed3); $elapsed4 = $timer->timeElapsed('tekitou', 'nanka'); var_dump($elapsed4); ?>
# php benchmark_test.php float(0.00041294097900391) float(0.00031900405883789) float(-1365994925.5735) int(0)
$elapsed3と$elapsed4を見てわかるとおり、指定していないMarkerは0として扱われる的な
$timer->timeElapsed($start, $end)
配列で取得
<?php ....... $timer->stop(); $prof = $timer->getProfiling(); print(print_r($prof,1)); print "\n"; ?>
# php benchmark_test.php Array ( [0] => Array ( [name] => Start [time] => 1366082135.83870300 [diff] => - [total] => - ) [1] => Array ( [name] => mark_A [time] => 1366082135.83876000 [diff] => 5.6982040405273E-5 [total] => 5.6982040405273E-5 ) [2] => Array ( [name] => mark_B [time] => 1366082135.83906000 [diff] => 0.00030016899108887 [total] => 0.00035715103149414 ) [3] => Array ( [name] => end [time] => 1366082135.83909400 [diff] => 3.3855438232422E-5 [total] => 0.00039100646972656 ) [4] => Array ( [name] => Stop [time] => 1366082135.83913300 [diff] => 3.9100646972656E-5 [total] => 0.00043010711669922 ) )