小编Fut*_*ure的帖子

setTimeout / setInterval在后台标签(Chrome和Firefox)中滞后1000ms

当事件使用setTimeout / setInterval排队时,并且用户正在查看单独的选项卡时,Chrome和Firefox在执行事件之前强制执行至少1000ms的延迟。本文详细介绍了该行为。

前面已经在StackOverflow上对此进行了讨论,但是问题和答案仅适用于动画。显然,当用户重新进入选项卡时,动画只能被强制更新为最新状态。

但是该解决方案不适用于顺序音频。我有Web Audio API依次播放多个音频文件,并且setTimeout用于倒数播放下一个音频文件的时间。如果将选项卡放在后台,则每个模式之间的间隔会令人烦恼1秒钟,这是为高级音频设计的API中的一个极端缺陷。

您可以在各种HTML5音序器中看到这种行为,例如使用PatternSketch-只需输入模式,播放并转到另一个选项卡即可。

因此,我需要一种变通方法:一种在没有1000ms限制的情况下将事件排队的方法。有人知道吗?

  • 我能想到的唯一解决方案是让window.postMessage每毫秒运行一次,并每次检查事件是否要执行。这绝对不利于性能。这是唯一的选择吗?

  • 显然,没有为Web Audio API计划事件系统,因此这是毫无疑问的。

javascript firefox google-chrome settimeout setinterval

5
推荐指数
1
解决办法
3669
查看次数