Web Workers:SetInterval 和 SetTimeout 可靠性

Web Workers: SetInterval and SetTimeout reliability

本文关键字:SetTimeout 可靠性 SetInterval Workers Web      更新时间:2023-09-26

在浏览器环境中,setTimeoutsetInterval的准确性并不可靠 - 时间敏感性是一个问题。

最近,我们得到了 requestAnimationFrame ,这使我们能够做得更好一点(在performance.now()及其时间戳方面)。

长话短说 - 我决定用Javascript构建一个节拍器,虽然它可以工作,但它在一定速度以上相当不准确。虽然补偿后期帧可以让速度不会随着时间的推移而不同步,但单个节拍略有偏差,这不适用于节拍器。(这对于动画来说不是问题,因为它本质上不需要离散。

现在,我

可以选择尝试根据我指定的阈值执行前瞻,以尝试在可用帧之间放置单击(使用动画循环中的setTimeout)。不过,我想我会遇到类似的问题,因为由于事件循环setTimeout在浏览器中不可靠,除非 HTML5 音频 API 允许您将播放延迟几毫秒。

我的问题:setTimeoutsetInterval在 Web 工作者环境中是否更准确、更可靠?

我们可以对您的问题说"是",Web worker 对于 settimeout 和 setinterval 函数是可靠的,因为 Web worker 根据 ui 在后台运行,因此它们为您提供非阻塞 UI 事件(它们可能会影响节拍器速度),而您正在处理持续的节拍器定时。

顺便说一下,这里有一个关于网络工作者的好文档。