A Simple PHP Benchmarking function
February 1, 2024
note-to-self
I recently needed to find where some performance issues were and didn't have the time to
download and figure out any real-life tools, but this basic system helped. I could just sprinkle lg()
in the code and it would log the file, line and any information I passed in. It also automatically logs
the difference between the last lg()
call and the current one.
It's rudimentary but helps in a pinch. For a Laravel project, I just added it at the end of the controller, outside the class, and then it was available for that route. I removed it when I was done.
function lg($context=[])
{
static $last;
static $log;
if ($log === null) {
$name= (new \DateTime)->format('Y-m-d_H-i-s');
$log = "/var/www/html/{$name}.tsv"; # this is the path inside my docker container but is just the docroot
}
ob_start();
debug_print_backtrace();
$etrace = ob_get_clean();
$trace = explode(PHP_EOL, $etrace);
$ms = microtime(true);
$date = (new \DateTime)->format('Y-m-d H:i:s.u');
list($m,) = explode(': ', $trace[0]);
if (is_array($context) || is_object($context)) {
$context = json_encode((object)$context);
}
$time = $ms - $last;
error_log("{$m}\t{$time}\t{$context}\t{$ms}\t$date\n", 3, $log);
$last = $ms;
}