Я провожу широкое исследование производительности в поддерживаемом мною приложении и настроил простое решение для отслеживания времени выполнения запросов, но не могу найти информацию, чтобы проверить, будет ли это удовлетворительно точно.
Похоже, что это принесло некоторую полезную информацию, и в результате я уже устранил некоторые проблемы с производительностью, но я также вижу некоторые запутанные записи, которые заставляют меня усомниться в точности записанного времени выполнения.
Должен ли я добавить явный вызов метода в конце каждого вызывающего скрипта, чтобы отметить конец его выполнения, или этот (довольно аккуратный) подход с использованием деструктора достаточно хорош?
Код вызова вверху запрошенного скрипта:
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);
}
}