performance.now() 优于 date.now() 因其精度达微秒级、基于单调递增时钟、不受系统时钟调整影响;用法为 const start = performance.now(); 执行任务;const end = performance.now(); console.log(耗时:${end - start} ms);

Performance.now() 返回的是以毫秒为单位的高精度时间戳,精度可达微秒级(通常精确到 1/1000 毫秒),且不受系统时钟调整影响,适合用于性能测量、动画帧控制、调试耗时等场景。
为什么用 Performance.now 而不是 Date.now
Date.now() 只能精确到毫秒,且依赖系统时钟——若用户手动调时间或 NTP 同步导致时钟跳变,结果可能不连续或倒退。
Performance.now() 基于页面启动后的单调递增时钟(monotonic clock),返回的是相对于 performance.timeOrigin 的差值,稳定、高精度、无跳跃。
基本用法:记录执行耗时
直接调用获取当前时间戳,两次调用相减即得经过时间(单位:毫秒,含小数):
- 开始前调用一次:
const start = performance.now(); - 操作结束后再调一次:
const end = performance.now(); - 计算耗时:
console.log(`耗时:${end - start} ms`);
例如测量函数执行时间:
function heavyTask() {
let sum = 0;
for (let i = 0; i const t0 = performance.now();
heavyTask();
const t1 = performance.now();
console.log(<code>heavyTask 执行了 ${(t1 - t0).toFixed(3)} ms</code>); // 如:24.876 ms注意 timeOrigin 与时间基准
performance.timeOrigin 是页面加载起始时间(对应 Navigation Timing 的 navigationStart),performance.now() 实际返回的是 当前时间 - timeOrigin。它不是绝对时间,而是相对页面生命周期的高精度偏移量。
- 该值通常为小数,如
123456789.123,单位毫秒 - 不同浏览器中
timeOrigin可能略有差异(取决于导航开始时机),但同一页面内now()差值完全可靠 - 无需手动处理
timeOrigin,除非你需要对齐其他时间指标(如navigationStart)
常见使用场景与建议
- 测量异步操作:在 Promise.then 或 async/await 中前后调用,注意避免因事件循环延迟引入误差
-
RAF 动画帧间隔分析:在
requestAnimationFrame回调中连续记录,可观察实际帧率波动 - 避免频繁调用:虽然开销极小,但在高频循环(如每帧多次)中仍建议复用已获取的时间值
-
不用于业务时间显示:它不表示真实世界时间,也不适合做定时器(请用
setTimeout或setInterval)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











