javascript - setInterval 不会在非事件选项卡上减慢速度

标签 javascript google-chrome firefox timer setinterval

这可能与一个非常常见的问题相反:当您在一个选项卡上使用 setInterval 并切换到另一个选项卡时,间隔会显着减少(即变慢)。这对于音频计时非常明显,因为您可以听到它正在放慢速度。

但在最新的 Chrome 56 和 Firefox 51 上,我无法再实现它了。

但是在 Chrome 上,切换标签页可能会产生影响,但这种情况很少发生,而且似乎是随机发生的。出于某种原因,它甚至会限制 Web Worker。

这让我很头疼,因为我正在尝试编写一些需要非常精确计时的 Web Audio API 内容,而且我什至看不出 setInterval 和 Web Workers 之间的区别,后者应该在自己的线程上运行。

为什么 setInterval 不像以前那样限制不活动的标签页?

更新:即使是通过 Blob URI 加载的 Web Worker 中的 setInterval,在某些情况下也会受到限制,例如切换标签页。

最佳答案

由于javascript是运行时编译代码(由浏览器在运行时编译,浏览器必须对其进行处理)。当您导航到其他选项卡时,该页面有自己的脚本,浏览器也必须编译该代码。因此,浏览器为事件选项卡中的脚本分配高优先级,而剩余选项卡中的脚本分配的优先级较低。所以它会影响非事件选项卡上的脚本。但是,如果您的机器有更多可用 RAM,则不会发生此问题。

关于javascript - setInterval 不会在非事件选项卡上减慢速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42151856/

相关文章:

javascript - Chrome 浏览器中的多点触控

css - 背景图像在 Chrome 上使用 Bootstrap 在右侧重复

google-chrome - IPython Notebook使Chrome标签页崩溃

javascript - Ng-Bind 影响表头

javascript - Java - 使用 Selenium 等待 JavaScript 事件(例如 onchange)完成

javascript - 当前对禁用 JavaScript 的浏览器接受/首选的处理方式

javascript - Firefox 开发者版网络选项卡不显示本地 html 资源

javascript - 如何根据比较在ajax中重新加载页面

Jquery jFrame 在 IE 中不起作用,但在 FF 中

javascript window.location 在 Firefox 中不起作用