setInterval在非活动标签

时间:2017-02-10 05:03:08

标签: javascript google-chrome firefox timer setinterval

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

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

然而,在Chrome上很少,而且看似随机,切换标签可以有效。它甚至出于某种原因限制了Web Workers。

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

为什么setInterval不像过去那样表现并限制非活动标签?

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

1 个答案:

答案 0 :(得分:1)

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