Web Workers: setInterval和setTimeout的可靠性

9
在浏览器环境中,当时间敏感性成为问题时,setTimeoutsetInterval的准确性不可靠。
最近,我们拥有了requestAnimationFrame,它使得我们在performance.now()和其时间戳方面更加准确。
长话短说——我决定用Javascript构建节拍器,虽然它可以工作,但在某个速度以上它非常不准确。虽然通过补偿迟到的帧可以使节奏不会随着时间而失步,但是单个节拍略微偏离,这对于节拍器不起作用。(这对于动画来说不是问题,因为它本质上不需要离散值。)
现在,我可以尝试根据我指定的阈值执行前瞻,以尝试将点击放置在可用帧之间(在动画循环中使用setTimeout)。但是,我想象中,由于事件循环,setTimeout在浏览器中不可靠,除非HTML5音频API允许您延迟播放若干毫秒。
我的问题是:在Web Worker中,setTimeoutsetInterval比浏览器环境更准确可靠吗?

4
要获得完美的计时,唯一的方法是使用音频API。在“处理时间:以节奏播放声音”下,这篇文章中有一个关于计时的部分。 - spender
@spender 嘿,只是想说 webAudio 真的很好用(在为无限节拍器循环跳过一些障碍后)。好建议,感谢你的提示! - user677526
1个回答

6
我们可以回答你的问题并表示,Web Workers可靠地用于settimeout和setinterval函数,因为Web Workers在后台运行并根据用户界面提供非阻塞ui事件(它们可能会影响节拍器的速度),同时您可以处理持续的节拍计时。
顺便说一下,这里有一份关于Web Workers的好文档 here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接