【问题标题】:performance.now() vs Date.now()performance.now() 与 Date.now()
【发布时间】:2015-08-28 00:26:25
【问题描述】:

performance.now()Date.now() 有什么区别?

我是否应该考虑将performance.now() 替换为Date.now(),因为performace.now() 更加一致和独立?

【问题讨论】:

  • 不! Date.now()返回自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的毫秒数,performance.now() 返回自任意纪元以来经过的毫秒/微秒数。基本上,performance.now() 应该只在你想测量两个时间点之间的相对距离时使用,而不是它们的“绝对”时间位置。
  • @buttifulbuttefly 所说的,加上 ...performance.now 提供更精确的计时(亚毫秒精度)。
  • 确实,更精确的时间,而不是更精确的时间
  • @markE 这不再是真的了。由于Spectreperformance.nowis being limited的精度

标签: javascript time


【解决方案1】:

它们都有不同的用途。

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

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

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

请参阅When milliseconds are not enough: performance.nownow method (Internet Explorer) - MSDN 了解更多信息。

官方 W3C 规范可以在这里找到:High Resolution Time API

【讨论】:

【解决方案2】:

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

如需更好地了解,请访问link

【讨论】:

    【解决方案3】:

    我注意到的第一件事是 performance.now()Date.now()4 倍(400k 操作 vs 100k 在我的计算机上)。但是,如果您只是数数,使用performance.now() 是更好的选择。它完全取决于代码开始运行以来的时间,而时钟更改不会影响时间。它也更准确:计算我们(微秒)而不是毫秒。

    在支持方面,Date.now() 的支持略高于 performance.now),因为两者都受到现代浏览器的支持,包括 IE10/11

    new Date().getTime() 有更多的支持(只是一点点)并且比Date.now()2x。它比较慢,因为它创建了一个对象,然后调用了一些东西。

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多