WebPerf 工作组 添加了 高分辨率计时器 ,以便在 Web 平台上进行比 +new Date 和较新的 Date.now() 更精确的衡量。

下面列出了您会收到的值,以供您参考:

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

您会发现,上述两个值相差几个数量级。performance.now() 是自特定网页开始加载以来经过的浮点毫秒数(具体而言是 performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) 时间戳)。您可能会说,它可能是从 Unix 纪元开始计算的毫秒数,但 Web 应用很少需要知道当前时间与 1970 年之间的时间差。此数值与网页相关,因为您将比较两个或更多测量结果。

另一个附加好处是,您可以依赖时间的单调性。下面由 WebKit 工程师 Tony Gentilcore 为您解答:

在某些情况下,您需要使用此高分辨率计时器,而不是获取基本时间戳:

  • 游戏或动画运行循环代码
  • 精确计算帧速率
  • 在动画或其他基于时间的序列的特定时间点触发操作或音频
  • 高分辨率计时器目前在 Chrome(稳定版)中以 window.performance.webkitNow() 的形式提供,此值通常等于传入 requestAnimationFrame 回调的新参数值。很快,WebKit 将弃用其前缀,此前缀将通过 performance.now() 提供。特别是,由 Microsoft 的 Jatinder Mann 领导的 WebPerfWG 在成功移除前缀方面取得了非常显著的成效

    总的来说,performance.now() 是…

  • 小数部分包含微秒的双精度数
  • 相对于网页的 navigationStart,而不是相对于 Unix 纪元
  • 不会因系统时间变化而偏差
  • 适用于 Chrome 稳定版、Firefox 15 及更高版本和 IE10。
  • 如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。

    最后更新时间 (UTC):2012-08-15。

    [[["易于理解","easyToUnderstand","thumb-up"],["解决了我的问题","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["没有我需要的信息","missingTheInformationINeed","thumb-down"],["太复杂/步骤太多","tooComplicatedTooManySteps","thumb-down"],["内容需要更新","outOfDate","thumb-down"],["翻译问题","translationIssue","thumb-down"],["示例/代码问题","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["最后更新时间 (UTC):2012-08-15。"],[],[]]