Skip to content

Instantly share code, notes, and snippets.

@a904guy
Created September 23, 2023 17:01
Show Gist options
  • Save a904guy/aff3b2010b6f6ea0f3cb85a78e50623b to your computer and use it in GitHub Desktop.
Save a904guy/aff3b2010b6f6ea0f3cb85a78e50623b to your computer and use it in GitHub Desktop.
Quick Benchmark Function to Gather Execution Times in PHP.
<?php
register_tick_function('trackExecutionTime');
declare(ticks=1);
function trackExecutionTime()
{
global $executionTimes;
$stack = debug_backtrace();
if (isset($stack[1]['function'])) {
$functionName = isset($stack[1]['class']) ? $stack[1]['class'] . '::' . $stack[1]['function'] : $stack[1]['function'];
if (!isset($executionTimes[$functionName])) {
$executionTimes[$functionName] = [];
}
$count = count($executionTimes[$functionName]);
if ($count == 0 || isset($executionTimes[$functionName][$count - 1]['end_time'])) {
$executionTimes[$functionName][] = [
'start_time' => microtime(true),
'end_time' => null
];
} else {
$executionTimes[$functionName][$count - 1]['end_time'] = microtime(true);
}
}
}
// At the end of your code add:
echo "Execution Times Summary:" . PHP_EOL;
foreach ($executionTimes as $function => $times) {
$totalTime = 0;
$minTime = PHP_INT_MAX;
$maxTime = PHP_INT_MIN;
echo "Function/Method: $function" . PHP_EOL;
foreach ($times as $index => $time) {
if (isset($time['end_time'])) {
$elapsed = $time['end_time'] - $time['start_time'];
$elapsedMs = $elapsed * 1000; // Convert to milliseconds for human readability
$totalTime += $elapsed;
$minTime = min($minTime, $elapsed);
$maxTime = max($maxTime, $elapsed);
echo " Call #" . ($index + 1) . " took ${elapsedMs} ms" . PHP_EOL;
}
}
$averageTime = $totalTime / count($times);
$averageTimeMs = $averageTime * 1000;
$minTimeMs = $minTime * 1000;
$maxTimeMs = $maxTime * 1000;
echo " Average Time: ${averageTimeMs} ms" . PHP_EOL;
echo " Minimum Time: ${minTimeMs} ms" . PHP_EOL;
echo " Maximum Time: ${maxTimeMs} ms" . PHP_EOL;
echo PHP_EOL; // Separate individual function/method summaries by a newline for better readability
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment