在浏览器环境中,setTimeout
和setInterval
的准确性并不可靠 - 时间敏感性是一个问题。
最近,我们得到了 requestAnimationFrame
,这使我们能够做得更好一点(在performance.now()
及其时间戳方面)。
长话短说 - 我决定用Javascript构建一个节拍器,虽然它可以工作,但它在一定速度以上相当不准确。虽然补偿后期帧可以让速度不会随着时间的推移而不同步,但单个节拍略有偏差,这不适用于节拍器。(这对于动画来说不是问题,因为它本质上不需要离散。
现在,我可以选择尝试根据我指定的阈值执行前瞻,以尝试在可用帧之间放置单击(使用动画循环中的setTimeout
)。不过,我想我会遇到类似的问题,因为由于事件循环setTimeout
在浏览器中不可靠,除非 HTML5 音频 API 允许您将播放延迟几毫秒。
我的问题:setTimeout
和setInterval
在 Web 工作者环境中是否更准确、更可靠?
我们可以对您的问题说"是",Web worker 对于 settimeout 和 setinterval 函数是可靠的,因为 Web worker 根据 ui 在后台运行,因此它们为您提供非阻塞 UI 事件(它们可能会影响节拍器速度),而您正在处理持续的节拍器定时。
顺便说一下,这里有一个关于网络工作者的好文档。