I want to make a status page for my application using symfony2 where I want to print the execution time (along with other data) of the particular request. I could not find anyway to do this.
I know that I can track the execution time of a code part with:
$starttime = microtime();
// do something
$duration = microtime() - $starttime;
But for obvious reason I cannot place it in the controller, as the whole bootstrap would be not tracked. Also rendering the template would not be included.
Is there any way to get as near as possible to the total execution time of the script?
I found a way which I think is ok for our use case. I created a new file performance.php in the web folder which looks like this:
<?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';
I also registered a twig extension which uses the global and calculates the elapsed time:
<?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";
}
}
When we want to do some performance measurements, we can simply use performance.php. The template calls the function and can then display the execution time:
{{ performance_exectime() }}
It outputs 0 if the start time is not set (e.g. when the normal app.php is used), so it's safe to use in any case. On the other hand, if someone decides to use performance.php as an entry point, it shouldn't break anything as only one global variable is different.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With