我有一个使用 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 毫秒增量,并且播放流畅requestAnimationFrame
的计时器,但它对移动Safari没有帮助。AudioContext
的计时器,但我不确定我该怎么做,因为我没有尝试预先安排事件,我正在按顺序执行数组中的事件用户可以实时交互。 (而且我不确定它会有所帮助。)这是移动版 Safari 中精确度的硬性限制吗?一个错误?
对于编辑现有代码或替代方法的建议,我将不胜感激。