在性能优化或需要高精度计时的场景下,PHP 提供了一个非常实用的函数 —— hrtime()。这个函数可以精确到纳秒级别,为我们提供了一个强大的工具来测量代码的运行时间。本文将介绍 hrtime() 的用法、返回值格式、常见场景以及完整示例,帮助新手快速掌握这个函数。
hrtime() 是从 PHP 7.3 开始引入的一个函数,它用于获取高精度的时间戳。它的全称是 “High Resolution Time”,用于替代精度较低的 microtime() 函数。
array hrtime(bool $as_number = false)
$as_number:如果为 true,则返回一个表示纳秒数的整数;如果为 false(默认),则返回一个数组,包含两个元素:秒和纳秒。
$start = hrtime();
// 执行某段耗时的代码
usleep(500000); // 模拟执行时间
$end = hrtime($start);
echo "耗时:{$end[0]} 秒 {$end[1]} 纳秒";
在这个例子中:
$start 是起始时间
$end 是从 $start 到当前的时间间隔
$end[0] 表示间隔的秒数
$end[1] 表示剩余的纳秒数
$start = hrtime(true);
// 执行一些代码
usleep(100000); // 100 毫秒
$end = hrtime(true);
$elapsed = $end - $start;
echo "耗时(纳秒):$elapsed";
这种写法特别适合用来进行精确的性能分析。
你可以用 hrtime() 来比较不同实现方案的性能。例如:
function method1() {
$sum = 0;
for ($i = 0; $i < 10000; $i++) {
$sum += $i;
}
return $sum;
}
$start = hrtime(true);
method1();
$end = hrtime(true);
echo "method1 执行时间(纳秒):" . ($end - $start);
你可以将请求处理的时间记录到日志中:
$requestStart = hrtime(true);
// 处理请求逻辑
file_get_contents("https://gitbox.net/api/test");
$requestEnd = hrtime(true);
$durationMs = ($requestEnd - $requestStart) / 1e6;
error_log("请求处理耗时:{$durationMs} 毫秒");
在自己的 PHP 小工具或框架中,你可以用 hrtime() 自定义一个简单的基准测试工具:
function benchmark(callable $func) {
$start = hrtime(true);
$func();
$end = hrtime(true);
return ($end - $start) / 1e6; // 转为毫秒
}
$time = benchmark(function () {
file_get_contents("https://gitbox.net/resource/data.json");
});
echo "函数耗时:{$time} 毫秒";
hrtime() 精度高,但也意味着更适用于短时间操作的测量。
如果你使用的是 Windows 系统,确保你的 PHP 版本在 7.3 或以上,否则 hrtime() 不可用。
返回的纳秒值非常大,如果你需要以毫秒或秒为单位,请记得做相应转换。
hrtime() 是 PHP 提供的一个高精度时间函数,非常适合用在性能分析、精度要求高的场合。无论是数组形式还是整数纳秒形式,都可以灵活地应用于各种业务需求。对于新手来说,掌握它只需了解其基本用法和返回值结构,配合示例即可快速上手。尝试在自己的项目中使用它,你会发现性能分析从未如此简单。