仅在 Mobile Safari 中不一致的 10ms setTimeout

问题描述 投票:0回答:0

我有一个使用 10ms 的网络应用程序,作为主时钟重复

setTimeout

这似乎适用于除移动版 Safari 以外的所有浏览器。 桌面版 safari 很好。

setTimeout
在web worker中,但是如果它在主脚本体中也会出现同样的问题。

<script id="masterClock" type="javascript/worker">
  let onmessage = function (event) {
    let delay = event.data[0] || 10; // milliseconds
    let time = Date.now();
    console.log(time) // yields 10ms increments in all browsers except Safari
    while (Date.now() < time + delay) { };
    postMessage({data: []});
  };
</script>
  • 日志记录
    time
    (见下文)在 Chromium 浏览器和桌面 Safari 中产生一致的 10 毫秒增量,并且播放流畅
  • 然而,在移动版 Safari 中,播放缓慢、卡顿且不一致。由于某种原因,我看不到移动 safari 中的网络工作者日志,但是,我假设它们甚至没有 10 毫秒的增量。
  • 我试过一个基于
    requestAnimationFrame
    的计时器,但它对移动Safari没有帮助。
  • 我考虑过尝试基于
    AudioContext
    的计时器,但我不确定我该怎么做,因为我没有尝试预先安排事件,我正在按顺序执行数组中的事件用户可以实时交互。 (而且我不确定它会有所帮助。)
  • 时钟的功能是同步互动、音乐音频事件。

这是移动版 Safari 中精确度的硬性限制吗?一个错误?

对于编辑现有代码或替代方法的建议,我将不胜感激。

javascript settimeout mobile-safari web-worker audiocontext
© www.soinside.com 2019 - 2024. All rights reserved.