PHPなページの実行時間を計測するために下記のようなコードを使っているのだが、
<?php $time_start = microtime(true); ?> ページ表示部分 <?php $time_end = microtime(true); echo "実行時間:" . number_format($time_end - $time_start , 5) . " sec"; ?>
$time_start を毎回書くのが面倒。
request_once されるような config.php的なファイルに
define('START_TIME', microtime(true));
と定義しておくといいのかもしれないが、必要な時に関数一発で時間得られるようにしたかった。
で、こんな関数を作成。PHP5.4.0以降しか使えません
function getExectime() { // 小数点以下5桁まで $t = number_format(microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'] , 5); return "実行時間" . $t . " sec"; }
PHP5.4.0から $_SERVER[‘REQUEST_TIME_FLOAT’]変数が追加された。
これはリクエスト開始時のタイムスタンプをマイクロ秒精度で得られる変数。
PHP5.1からは$_SERVER[‘REQUEST_TIME’]変数というのがあったのだが、こっちはマイクロ秒までは見てくれないので1秒以内の処理などは計測できなかった。
PHP: $_SERVER – Manual
これで実行時間が欲しい時に echo getExectime(); するだけでよくなった。
もうPHPファイルの最初に $time_start 書かなくてもいい。らくちん
もちろん PHPファイル内での特定の処理(ループの前後とか)の時間を計測する場合は $_SERVER[‘REQUEST_TIME_FLOAT’]使っても意味がないので、そういう用途には 従来の$time_startと$time_endの差分計測を使う。
今回はページ表示の実行時間計測なので、$_SERVER[‘REQUEST_TIME_FLOAT’]使う方がより正確な値が得られるんじゃないかな?っていうお話。
違いはどの程度になるかというと
従来方式
実行時間:0.00410 sec
$_SERVER変数方式
実行時間:0.01483 sec
リクエスト開始から処理開始までの0.01秒弱が加算された感じ
そもそも測定範囲が違うので、過去に計測した実行時間と比較したい場合は従来方式を使わないとダメ。