performance.now() 对比 Date.now()
performance.now() vs Date.now()
performance.now()
和Date.now()
有什么区别?
我是否应该考虑 performance.now()
来替代 Date.now()
,因为 performace.now()
更加一致和独立?
它们都有不同的用途。
performance.now()
相对于页面加载,数量级更精确。用例包括基准测试和其他需要高分辨率时间的情况,例如媒体(游戏、音频、视频等)
需要注意的是performance.now()
只适用于较新的浏览器(包括IE10+)。
Date.now()
相对于 Unix 纪元 (1970-01-01T00:00:00Z) 并依赖于系统时钟。用例包括自 JavaScript.
开始以来的相同旧日期操作
有关详细信息,请参阅 When milliseconds are not enough: performance.now
and now
method (Internet Explorer) - MSDN。
可在此处找到官方 W3C 规范:High Resolution Time API
Date.now()
returns 自 1970 年 1 月 1 日以来经过的毫秒数 00:00:00 UTC,performance.now()
returns 毫秒数,微秒在小数部分,从 performance.timing.navigationStart
,文档导航的开始,到 performance.now()
调用。 Date.now()
和 performance.now()
之间的另一个重要区别是后者是单调递增的,因此两次调用之间的差异永远不会为负。
为了更好地理解,请访问 link。
我注意到的第一件事是 performance.now()
比 Date.now()
慢 4 倍(400k 操作对我的计算机上的 100k)。但是,如果您只是计算,使用 performance.now()
是更好的选择。它完全取决于自代码开始以来的时间 运行,并且时钟更改 不会 影响时间。它也更准确:计算我们(微秒)而不是毫秒。
至于支持,Date.now()
比performance.now()
稍微多一点支持,现代浏览器都支持,甚至IE10/11 .
new Date().getTime()
有更多的支持(只是一点点)并且 2x 比 Date.now()
慢。它比较慢,因为它创建了一个 object 然后调用了一些东西。
但是,此 caniuse.com 页面显示 performance.now()
几乎总是没问题,在 97.9%(截至目前)的情况下。
(从这里开始我只会提到Date.now()
,但new Date.getTime()
在下面的情况下是一样的)
用法
Date.now()
可以(并且应该)用于实现是否已经过了一段时间,假设速度是(非常重要的)关注点:它可以很容易地在 60fps 的计算机上获得正确的帧。它也可以用于时钟。它计算自 Unix Epoch 以来经过了多少毫秒(参见最佳答案)。对于需要更高准确性的应用程序(见下文),可以使用 performance.now()
。如果您使用计时器,它的行为与 Date.now()
完全相同(因为它仍然以毫秒为单位计数),只是它更准确。要将 performance.now()
用作(稍微)更准确的 Date.now()
或 object,请将 performance.timing.navigationStart
添加到该值。这似乎与 Date.now()
object 相差几毫秒,但我不确定这是谁的错。
准确度
据我所知,performance.now()
仅比 Chrome 桌面上的 Date.now()
准确 10 倍:考虑到时间跳跃0.1ms,但是,对于大多数基于时间的应用程序来说,这个精度已经足够了。 (有关其准确性的更多信息,请阅读 Firefox 部分)它可能看起来更准确,但事实并非如此:出于安全原因,它是有意限制的,因为利用时间可能允许恶意用户 access other applications.
Firefox
遗憾的是,如果您有 Firefox 用户并且无法访问 Cross-Origin headers,则 不可能实现这种性能(0.1 毫秒)。为了启用它,请将 Cross-Origin-Opener-Policy: same-origin
和 Cross-Origin-Embedder-Policy: require-corp
放入您的文档中。用户还可以将此速度提高到 100 毫秒(或更高)。访问 Mozilla 文档了解更多信息。
performance.now()
和Date.now()
有什么区别?
我是否应该考虑 performance.now()
来替代 Date.now()
,因为 performace.now()
更加一致和独立?
它们都有不同的用途。
performance.now()
相对于页面加载,数量级更精确。用例包括基准测试和其他需要高分辨率时间的情况,例如媒体(游戏、音频、视频等)
需要注意的是performance.now()
只适用于较新的浏览器(包括IE10+)。
Date.now()
相对于 Unix 纪元 (1970-01-01T00:00:00Z) 并依赖于系统时钟。用例包括自 JavaScript.
有关详细信息,请参阅 When milliseconds are not enough: performance.now
and now
method (Internet Explorer) - MSDN。
可在此处找到官方 W3C 规范:High Resolution Time API
Date.now()
returns 自 1970 年 1 月 1 日以来经过的毫秒数 00:00:00 UTC,performance.now()
returns 毫秒数,微秒在小数部分,从 performance.timing.navigationStart
,文档导航的开始,到 performance.now()
调用。 Date.now()
和 performance.now()
之间的另一个重要区别是后者是单调递增的,因此两次调用之间的差异永远不会为负。
为了更好地理解,请访问 link。
我注意到的第一件事是 performance.now()
比 Date.now()
慢 4 倍(400k 操作对我的计算机上的 100k)。但是,如果您只是计算,使用 performance.now()
是更好的选择。它完全取决于自代码开始以来的时间 运行,并且时钟更改 不会 影响时间。它也更准确:计算我们(微秒)而不是毫秒。
至于支持,Date.now()
比performance.now()
稍微多一点支持,现代浏览器都支持,甚至IE10/11 .
new Date().getTime()
有更多的支持(只是一点点)并且 2x 比 Date.now()
慢。它比较慢,因为它创建了一个 object 然后调用了一些东西。
但是,此 caniuse.com 页面显示 performance.now()
几乎总是没问题,在 97.9%(截至目前)的情况下。
(从这里开始我只会提到Date.now()
,但new Date.getTime()
在下面的情况下是一样的)
用法
Date.now()
可以(并且应该)用于实现是否已经过了一段时间,假设速度是(非常重要的)关注点:它可以很容易地在 60fps 的计算机上获得正确的帧。它也可以用于时钟。它计算自 Unix Epoch 以来经过了多少毫秒(参见最佳答案)。对于需要更高准确性的应用程序(见下文),可以使用 performance.now()
。如果您使用计时器,它的行为与 Date.now()
完全相同(因为它仍然以毫秒为单位计数),只是它更准确。要将 performance.now()
用作(稍微)更准确的 Date.now()
或 object,请将 performance.timing.navigationStart
添加到该值。这似乎与 Date.now()
object 相差几毫秒,但我不确定这是谁的错。
准确度
据我所知,performance.now()
仅比 Chrome 桌面上的 Date.now()
准确 10 倍:考虑到时间跳跃0.1ms,但是,对于大多数基于时间的应用程序来说,这个精度已经足够了。 (有关其准确性的更多信息,请阅读 Firefox 部分)它可能看起来更准确,但事实并非如此:出于安全原因,它是有意限制的,因为利用时间可能允许恶意用户 access other applications.
Firefox
遗憾的是,如果您有 Firefox 用户并且无法访问 Cross-Origin headers,则 不可能实现这种性能(0.1 毫秒)。为了启用它,请将 Cross-Origin-Opener-Policy: same-origin
和 Cross-Origin-Embedder-Policy: require-corp
放入您的文档中。用户还可以将此速度提高到 100 毫秒(或更高)。访问 Mozilla 文档了解更多信息。