requestAnimationFrame循环导致绘画延迟 1 帧

问题描述

在之前的 post 中,建议使用无限 requestAnimationFrame 循环来解决使用 requestAnimationFrame 的时间不一致,例如如下。

function workaroundLoop() {
  requestAnimationFrame(workaroundLoop);
};

我实际上是 tested this with an oscilloscope,并且这种循环确实可以很好地提高所有浏览器的计时精度(不仅是 Chrome,正如该帖子中所建议的那样)。

然而,新的问题是它在改变显示时引入了 1 帧延迟(当给出一个命令时)。例如,如果执行了 document.getElementById('stimulus_id').textContent = "NEW disPLAY"; 行,文本“NEW disPLAY”将显示在即将进行的屏幕重绘中,而只会在下一次重绘中显示。所以,如果没有循环,绘画总是立即进行,并在 0-16 毫秒内跟随命令(给定 60Hz 刷新率),但如果循环继续,绘画总是会延迟并且只发生 16-32 毫秒遵循命令。

值得注意的是,如果我使用带 desynchronized: true 的画布进行显示,Chrome、Microsoft Edge、Opera 没有延迟,但 Firefox 仍然有延迟。但是,除此之外,这在 Firefox 中不起作用,我也不知道如何将此解决方案用于非画布显示(例如简单文本)。

任何想法如何解决这个问题?也就是说:我仍然希望受益于 precise timing,但我也希望能够立即显示(绘制)元素。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)