「 2013年09月26日 」一覧

PHPでページの実行時間を取得

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秒弱が加算された感じ

そもそも測定範囲が違うので、過去に計測した実行時間と比較したい場合は従来方式を使わないとダメ。

スポンサーリンク
レクタングル大 広告