析构函数是标记脚本执行结束的正确位置吗?

时间:2010-01-29 23:11:24

标签: php performance apache measurement

我正在我维护的应用程序中进行一些广泛的性能调查,并且我已经设置了一个简单的解决方案来跟踪请求的执行时间,但是我无法找到信息来验证这是否会令人满意准确。

这似乎已经获得了一些好的信息,因此我已经消除了一些性能问题,但我也看到一些令人困惑的条目让我质疑记录执行时间的准确性。

我应该在每个调用脚本的末尾添加一个显式方法调用来标记它的执行结束,还是使用析构函数这个(相当整洁)的方法足够好?

请求脚本顶部的调用代码:

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 个答案:

答案 0 :(得分:1)

您需要做的是使用Xdebug。设置完成后非常简单,无需对代码进行任何更改即可全面覆盖需要多长时间的内容。