私が管理しているアプリケーションで広範なパフォーマンス調査を行っており、リクエストの実行時間を追跡するための簡単なソリューションをセットアップしましたが、これが十分に正確であるかどうかを確認するための情報を見つけることができません.
これにより、いくつかの良い情報が得られたようで、その結果、パフォーマンスの問題はすでに解消されていますが、記録された実行時間の正確性に疑問を抱かせる紛らわしいエントリもいくつか見られます。
各呼び出しスクリプトの最後に明示的なメソッド呼び出しを追加して、その実行の終了をマークする必要がありますか、それともデストラクタを使用したこの (かなりきちんとした) アプローチで十分ですか?
要求されたスクリプトの先頭にある呼び出しコード:
if( file_exists('../../../bench') )
{
require('../../../includes/classes/Bench.php');
$Bench = new Bench;
}
そして、ここにクラス定義があります(わかりやすくするために縮小されています):
require_once('Class.php');
class Bench extends Class
{
protected $page_log = 'bench-pages.log';
protected $page_time_end;
protected $page_time_start;
public function __construct()
{
$this->set_page_time_start();
}
public function __destruct()
{
$this->set_page_time_end();
$this->add_page_record();
}
public function add_page_record()
{
$line = $this->page_time_end - $this->page_time_start.','.
base64_encode(serialize($_SERVER)).','.
base64_encode(serialize($_GET)).','.
base64_encode(serialize($_POST)).','.
base64_encode(serialize($_SESSION))."\n";
$fh = fopen( APP_ROOT . '/' . $this->page_log, 'a' );
fwrite( $fh, $line );
}
public function set_page_time_end()
{
$this->page_time_end = microtime(true);
}
public function set_page_time_start()
{
$this->page_time_start = microtime(true);
}
}