私たちのユースケースに適していると思う方法を見つけました。次のような 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 つだけ異なるため、何も壊れません。