gpt4 book ai didi

javascript - 自 Spectre 和 Meltdown 以来如何在 JavaScript 中获得微秒计时

转载 作者:数据小太阳 更新时间:2023-10-29 04:48:53 25 4
gpt4 key购买 nike

情况

在编写高性能 JavaScript 代码时,Chrome 等提供的标准分析工具并不总是足够的。它们似乎只提供功能级别的粒度,向下钻取并找到我需要的信息可能非常耗时。

在 .NET 中,StopWatch 类提供了我所需要的:任意代码片段的亚微秒分辨率计时。

对于 JavaScript performance.now() 曾经是衡量性能的一个很好的方法,但是为了应对 Spectre 和 Meltdown,所有主流浏览器都将分辨率降低到甚至不到一毫秒。

performance.now() 上引用 MDN :

The timestamp is not actually high-resolution. To mitigate security threats such as Spectre, browsers currently round the result to varying degrees. (Firefox started rounding to 2 milliseconds in Firefox 59.) Some browsers may also slightly randomize the timestamp. The precision may improve again in future releases; browser developers are still investigating these timing attacks and how best to mitigate them.

问题

我需要微秒级精度计时。在撰写本文时,浏览器似乎没有提供任何选项或标志来禁用这些安全措施。也许我在谷歌上搜索了错误的术语,但我遇到的唯一文章是对安全问题的解释以及这些缓解措施如何解决这些问题。

我对这里的安全方面不感兴趣 - 我正在我自己的机器上对性能关键的 JavaScript 代码段进行基准测试,我唯一关心的是我以尽可能少的努力获得尽可能准确的测量结果可能。

现有的解决方法

我想到了两个选项:

  1. 安装未实现这些缓解措施的旧版浏览器

例如,我必须将旧版 FireFox 用于基准测试,将新版 Chrome 用于浏览。这是不切实际的,因为我需要在所有浏览器中进行测试(最好在所有浏览器中进行基准测试)。此外,新的优化并未在旧浏览器中实现,因此基准测试可能毫无用处。

  1. 使用 WebWorker 实现自定义计时器

我看过很多关于此的较旧的博客文章,但它们似乎都没有达到我需要的高精度(毕竟,曾经有 performance.now() 用于此)。

问题

如何在不求助于旧版浏览器、虚拟机等的情况下获得有效的 pre-Spectre performance.now()

JavaScript 中是否有任何编码技术或库可以达到微秒精度?

上述 3 种浏览器是否有禁用这些安全措施的选项或标志?

我最终正在寻找一种方法来准确衡量不同代码段相互比较的相对性能 - 因此,如果有一种解决方案可以给我滴答声,而不是微秒,那也是可以接受的,只要它准确并且适用于各种浏览器。

最佳答案

Firefox 确实有一个名为 privacy.reduceTimerPrecision 的配置设置,可以禁用 Spectre 缓解措施。您可以使用 Firefox 的 about:config 页面将其切换为 false(在地址栏中键入 about:config)。

通过 MDN 上的提示解决了这个问题.

关于javascript - 自 Spectre 和 Meltdown 以来如何在 JavaScript 中获得微秒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50117537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com