首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JavaScript中获得自光谱和熔毁以来的微秒计时

如何在JavaScript中获得自光谱和熔毁以来的微秒计时
EN

Stack Overflow用户
提问于 2018-05-01 13:39:27
回答 2查看 2.8K关注 0票数 12

形势

在编写高性能JavaScript代码时,Chrome等人提供的标准分析工具并不总是足够的。它们似乎只提供功能级别的粒度,深入挖掘并找到我需要的信息可能很费时。

在.NET中,StopWatch类给出了我所需要的精确信息:任意代码片段的亚微秒分辨率定时。

对于JavaScript来说,performance.now()曾经是衡量性能的一种很好的方法,但为了应对光谱仪和崩溃,所有主流浏览器都将分辨率降低到不到一毫秒。

performance.now()上引用MDN

时间戳实际上不是高分辨率的。为了减轻安全威胁,如谱,浏览器目前围绕的结果在不同程度上。(Firefox 59中的Firefox开始舍入2毫秒。)一些浏览器也可能稍微随机地设置时间戳。在未来的版本中,精确度可能会再次提高;浏览器开发人员仍在研究这些定时攻击以及如何最好地减轻它们。

问题所在

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

我对安全性方面不感兴趣--我在测试性能--在我自己的机器上,关键的JavaScript代码片段,而我唯一关心的是,我用尽可能少的努力获得尽可能精确的度量。

现有的解决办法

我想到了两个选择:

  1. 安装一个没有实现这些缓解措施的旧版本的浏览器

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

  1. 使用WebWorkers实现自定义定时器

在这方面,我看过很多老的博客文章,但似乎没有一篇能达到我所需要的高精度(毕竟,曾经有过performance.now() )。

问题是

如何在不需要使用旧的浏览器版本、虚拟机等的情况下,有效地获得预谱performance.now() ?。

在JavaScript中是否有任何实现微秒精度的编码技术或库?

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

我最终是在寻找一种方法来精确地测量不同代码段之间的相对性能--因此,如果有一种解决方案可以给我带来滴答,而不是微秒,那么只要它是准确的,并且在浏览器中工作,这是可以接受的。

EN

回答 2

Stack Overflow用户

发布于 2018-06-26 23:01:54

火狐确实有一个名为privacy.reduceTimerPrecision的配置设置,它禁用谱缓解功能。您可以使用Firefox的about:config页面(在地址栏中键入about:config )将其转换为false。

这是通过MDN上的一个提示发现的。

票数 5
EN

Stack Overflow用户

发布于 2021-01-29 18:20:52

从Firefox 79开始,如果让服务器在页面中发送两个标头,则可以使用高分辨率计时器:

从Firefox 79开始,如果跨源使用Cross-Origin-Opener-PolicyCross-Origin-Embedder-Policy标头隔离文档,则可以使用高分辨率计时器: 跨源-开放-政策:相同-来源交叉-嵌入-政策:要求-公司 这些标题确保顶级文档不会与跨源文档共享浏览上下文组。COOP进程--将您的文档隔离开来,而潜在的攻击者如果在弹出窗口中打开它,则无法访问您的全局对象,从而防止了一组名为XS-泄漏的跨源攻击。 参考文献:https://developer.mozilla.org/en-US/docs/Web/API/Performance/now

到目前为止还没有在页面上提到,但是通过一个小实验,我得出的结论是,计时器的精度是20秒,其中有那些标头,这比默认情况下得到的精度高出50倍。

代码语言:javascript
复制
(() => {
  const start = performance.now();
  let diff;
  while ((diff = performance.now() - start) === 0);
  return diff;
})();

对于这些标头,这将返回0.02或一个非常接近0.02的值,而1没有。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50117537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档