Является ли деструктор подходящим местом для обозначения конца выполнения скрипта? - PullRequest
0 голосов
/ 30 января 2010

Я провожу широкое исследование производительности в поддерживаемом мною приложении и настроил простое решение для отслеживания времени выполнения запросов, но не могу найти информацию, чтобы проверить, будет ли это удовлетворительно точно.

Похоже, что это принесло некоторую полезную информацию, и в результате я уже устранил некоторые проблемы с производительностью, но я также вижу некоторые запутанные записи, которые заставляют меня усомниться в точности записанного времени выполнения.

Должен ли я добавить явный вызов метода в конце каждого вызывающего скрипта, чтобы отметить конец его выполнения, или этот (довольно аккуратный) подход с использованием деструктора достаточно хорош?

Код вызова вверху запрошенного скрипта:

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);
    }
}

1 Ответ

1 голос
/ 30 января 2010

Что вам нужно сделать, это использовать Xdebug . Это очень просто, если вы настроили его, и вам не нужно ничего менять в коде, чтобы получить полное представление о том, сколько времени прошло.

...