PHP 记录代码中每个位置的运行时间
项目运行中开始出现了卡顿,需要进行问题定位,于是写了个函数来专门记录代码执行到每个位置所消耗的时间。
/**
* 记录运行时间
* @param string $name 名称
* @param bool $return 返回记录的时间
* @return array|void
*/
function traceRunTime($name, $return = false) {
// 上次时间戳
static $last;
// 记录列表
static $list = [];
// 返回记录列表
if (true === $return) {
[$last, $temp, $list] = [null, $list, []];
return $temp;
}
// 当前时间戳
$now = microtime(true);
// 执行时间(秒)
$diff = $now - ($last ?? $now);
// 设置当前时间戳为上次时间戳,供下次调用时使用
$last = $now;
// 记录到列表
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0];
$list[] = ['name' => $name, 'time' => $diff, 'line' => $backtrace['line']];
// 返回执行时间
return $diff;
}
使用示例
<?php
echo '今天星期三<br/>';
// 记录节点1
traceRunTime('p1');
echo '明天星期四<br/>';
// 记录节点2
traceRunTime('p2');
echo '再坚持一天,不是星期天<br/>';
// 记录节点3
traceRunTime('p3');
// 结束记录,并打印记录
var_dump(traceRunTime('end', true));