前言
Date.now()
和 performance.now()
都是 JS 中用于获取当前时间的方法,本文将讲述二者的区别与优劣。
Date.now()
返回自 Unix 时间纪元(1970年1月1日 00:00:00 UTC)以来的毫秒
数。
在大多数环境下,Date.now()
的精度为 1毫秒。
可能会受到系统时间的调整影响(例如手动更改系统时钟、自动校正时间等)。
如果修改系统时间
,Date.now()
的返回值会相应地改变。
注意:测试时需要手动清除浏览器缓存,否则可能并不会立即生效。
performance.now()
返回自 页面加载
(或其他指定起点)以来的时间,单位为毫秒
。
提供 高精度时间戳,通常精确到 微秒
(小数点后三位)。
不受系统时间调整的影响
,即使系统时钟发生变化,它也能提供连续且精确的时间测量。
对比
Date.now() | performance.now() | |
---|---|---|
精度 | 毫秒 | 微秒 |
起始时间 | 1970年1月1日 00:00:00 UTC | 页面加载 |
是否受系统时间影响 | 是 | 否 |
兼容性 | JS 的标准方法,适用于所有环境 | 支持较新版本的浏览器和Node.js |
应用场景
Date.now()
:
- 获取当前的日期和时间,比如用于生成时间戳、日志记录、显示时间等。
- 在需要与实际日历时间相关联的情况下使用,如设置定时器、计算某个日期距离现在的天数等。
performance.now()
:
- 高精度的时间测量,如性能监控、计算函数执行时间、动画渲染时间等。
- 由于不受系统时间调整的影响,适合用于测量程序运行时的时间间隔。
比如React源码中的getCurrentTime
使用该方法记录高精度的时间戳,用于调度和优化渲染过程。