performance.now()与Date.now()


75

performance.now()和之间有什么区别Date.now()

我应该考虑performance.now()替代它,Date.now()因为performace.now()它更加一致和独立吗?


13
没有!Date.now()返回自1970年1月1日00:00:00 UTCperformance.now()以来经过的毫秒数,返回自任意纪元以来经过的毫秒/微秒数。基本上,performance.now()仅应在要测量两个时间点之间的相对距离而不是它们在时间上的“绝对”位置时使用。
user703016 2015年

2
@buttifulbuttefly所说的,再加上...performance.now提供了更精确的计时(亚毫秒级精度)。
markE 2015年

2
确实,更精确的时间,而不是更精确的时间
Amadan 2015年

2
@markE这不再是真的。由于Spectre,其精确度performance.now 受到了限制
user5532169 '18

Answers:


62

它们都有不同的目的。

performance.now()相对于网页加载的,并且在数量级上更为精确。用例包括基准测试和其他需要高分辨率时间的情况,例如媒体(游戏,音频,视频等)

请注意,performance.now()仅在较新的浏览器(包括IE10 +)中可用。

Date.now()相对于Unix纪元(1970-01-01T00:00:00Z)并且依赖于系统时钟。自JavaScript开始以来,用例就包括相同的旧日期操作。

有关更多信息,请参见毫秒数不够:performance.nownow方法(Internet Explorer)-MSDN

正式的W3C规范可在此处找到:高分辨率时间API


6
这种精度是有代价的。慢了50%。很高兴知道您是否需要紧密联系。jsperf.com/perf-vs-date/1
的Eyal

2
糟糕,我的意思是慢80%。:-(
艾尔(Eyal)

2
请记住,谷歌审计想想date.now() developers.google.com/web/tools/lighthouse/audits/date-now
StLia

1
当前在Firefox中的表现为:now
Picard

1
在我的Raspberry Firefox上慢3倍。performance.now()似乎没有性能,但更精确。无论如何,几百种措施都不会影响性能。

22

Date.now()返回自1970年1月1日UTC以来经过的毫秒数,performance.now()返回毫秒数,从performance.timing.navigationStart文档的导航开始到performance.now()调用,以小数部分为微秒。Date.now()和之间的另一个重要区别performance.now()是后者单调递增,因此两个调用之间的区别永远不会为负。

为了更好地理解,请访问链接

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.