6

特定のリクエストの実行時間を (他のデータと共に) 表示したい symfony2 を使用して、アプリケーションのステータス ページを作成したいと考えています。とにかくこれを行う方法が見つかりませんでした。

コード部分の実行時間を次の方法で追跡できることを知っています。

$starttime = microtime();
// do something
$duration = microtime() - $starttime;

しかし、明らかな理由で、ブートストラップ全体が追跡されないため、コントローラーに配置できません。また、テンプレートのレンダリングも含まれません。

スクリプトの合計実行時間にできるだけ近づける方法はありますか?

4

2 に答える 2

8

私たちのユースケースに適していると思う方法を見つけました。次のような web フォルダーに新しいファイル performance.php を作成しました。

<?php
/**
 * This file is only used for doing realtime performance measurement
 * Right now only the microtime is calculated, but in the future the
 * xhproof module could be used: http://de2.php.net/manual/en/book.xhprof.php
 *
 * MAKE SURE TO NOT USE THIS FILE IN PRODUCTION FOR OTHER STUFF THAN REAL TIME
 * PERFORMANCE MEASUREMENT
 */

$GLOBALS['PerformanceTwigExtensionMicrotime'] = microtime(true);

require_once __DIR__.'/app.php';

また、グローバルを使用して経過時間を計算する小枝拡張機能も登録しました。

<?php

namespace Acme\DemoBundle\Extension;

class PerformanceTwigExtension extends \Twig_Extension {

    public function getFunctions() {
        return array(
            'performance_exectime' => new \Twig_Function_Method($this, 'getExecTime')
        );
    }

    public function getExecTime() {
        if (!isset($GLOBALS['PerformanceTwigExtensionMicrotime'])) {
            return 0;
        }

        $durationInMilliseconds = (microtime(true) - $GLOBALS['PerformanceTwigExtensionMicrotime']) * 1000;
        return number_format($durationInMilliseconds, 3, '.', '');
    }

    public function getName() {
        return "performance_extension";
    }

}

パフォーマンスを測定したい場合は、単純に performance.php を使用できます。テンプレートは関数を呼び出し、実行時間を表示できます。

{{ performance_exectime() }}

開始時刻が設定されていない場合(通常の app.php を使用する場合など)は 0 を出力するので、どのような場合でも安全に使用できます。一方、誰かが performance.php をエントリ ポイントとして使用することを決定した場合、グローバル変数が 1 つだけ異なるため、何も壊れません。

于 2012-04-27T09:46:18.650 に答える