PHP页面加载耗时统计:如何将微秒结果转换为毫秒输出?
解决PHP页面加载耗时以毫秒显示的问题
嘿,这个问题我之前踩过坑!其实关键是要正确使用microtime()的返回值,把秒级的耗时转换成毫秒,同时处理好数值格式化的问题。
最简洁的解决方案
直接用microtime(true)获取浮点型的时间戳(单位是秒,包含微秒),计算差值后乘以1000转成毫秒,再取整就能得到你想要的102ms这种格式了:
<?php // 记录页面加载起始时间(浮点型,秒为单位,带微秒) $startTime = microtime(true); // --- 这里是你的PHP应用业务代码 --- // 比如数据库查询、模板渲染、逻辑处理等 // --- 业务代码结束 --- // 计算耗时:结束时间 - 起始时间,再乘以1000转为毫秒 $loadDurationMs = (microtime(true) - $startTime) * 1000; // 格式化输出为整数毫秒(用round取整,或者intval直接截断小数) echo "页面加载耗时:" . round($loadDurationMs) . "ms"; // 如果你不需要四舍五入,也可以用intval($loadDurationMs) ?>
为什么之前的方法不对?
你之前得到的0.000102是秒为单位的耗时(换算成毫秒是0.102ms,可能你的例子是笔误,但核心是单位转换的问题)。
如果之前你用的是默认的microtime()(不带参数,返回字符串格式,比如"0.000102 1698765432"),直接做对比的话,要么没把字符串转成正确的浮点数值,要么忘记乘以1000转换单位,就会得到长字符串或者不符合预期的小数格式。
兼容旧写法的处理(如果一定要用字符串格式的microtime)
如果你因为某些原因必须用默认的字符串返回值,可以拆分字符串后再计算:
<?php // 拆分起始时间的微秒和秒部分,转成浮点型相加 list($microStart, $secStart) = explode(' ', microtime()); $startTime = (float)$microStart + (float)$secStart; // --- 业务代码 --- // 同样处理结束时间 list($microEnd, $secEnd) = explode(' ', microtime()); $endTime = (float)$microEnd + (float)$secEnd; // 转换为毫秒并输出 $loadDurationMs = ($endTime - $startTime) * 1000; echo "页面加载耗时:" . round($loadDurationMs) . "ms"; ?>
总的来说,microtime(true)的写法更简洁、不容易出错,推荐使用。
内容的提问来源于stack exchange,提问作者tivitonel
相关产品推荐
相关产品推荐

