在每帧 rAF 之前 运行 任务的可靠方法
Reliable way to run a task right before rAF in each frame
我偶然发现了 Paul Irish 发布的 article - requestAnimationFrame Scheduling For Nerds。
我通读了它然后想出了一个问题 有什么方法可以安排一个任务 运行 就在每一帧的 rAF 之前(见附图)?
首先 Chrome 和 Firefox 运行 rAF 在 paul 在他的文章中解释的布局和绘制之前。 Safari and IE have different behavior, Edge is fixing;
现在回到你的问题;考虑在每一帧的 rAF 回调之前 运行 JS(我的任务)有点平静。让我们假设 "My Task" 执行需要大约 4 毫秒,而您的 rAF 回调需要大约 5 毫秒才能在每一帧中完成。这将是 ~9ms 的 JS 执行。那么这里有什么意义呢?我们可以在 ~9ms 内 运行 rAF 回调中的所有内容,换句话说,这相当于延长 rAF 执行的长度:
帧前 JS 执行总数 = 我的任务代码执行 + 常规 rAF 代码执行
我们可以在 rAF 内部执行所有关键帧 JS;没有必要将 JS 执行分为两部分(我的任务 + rAF),因为在 Layout 和 Paint 之前你没有超过 ~10ms to execute rAF(JS 代码),如果我们超过 fps 下降,我们将见詹克斯;
TL:DR;那个关键时候除了rAF callback 没办法执行js :)
我偶然发现了 Paul Irish 发布的 article - requestAnimationFrame Scheduling For Nerds。
我通读了它然后想出了一个问题 有什么方法可以安排一个任务 运行 就在每一帧的 rAF 之前(见附图)?
首先 Chrome 和 Firefox 运行 rAF 在 paul 在他的文章中解释的布局和绘制之前。 Safari and IE have different behavior, Edge is fixing;
现在回到你的问题;考虑在每一帧的 rAF 回调之前 运行 JS(我的任务)有点平静。让我们假设 "My Task" 执行需要大约 4 毫秒,而您的 rAF 回调需要大约 5 毫秒才能在每一帧中完成。这将是 ~9ms 的 JS 执行。那么这里有什么意义呢?我们可以在 ~9ms 内 运行 rAF 回调中的所有内容,换句话说,这相当于延长 rAF 执行的长度:
帧前 JS 执行总数 = 我的任务代码执行 + 常规 rAF 代码执行
我们可以在 rAF 内部执行所有关键帧 JS;没有必要将 JS 执行分为两部分(我的任务 + rAF),因为在 Layout 和 Paint 之前你没有超过 ~10ms to execute rAF(JS 代码),如果我们超过 fps 下降,我们将见詹克斯;
TL:DR;那个关键时候除了rAF callback 没办法执行js :)