可靠的方式运行在每一帧RAF前的任务权

时间:2019-02-02 16:51:25

标签: javascript browser requestanimationframe

我绊倒了Paul Irish发表的article - requestAnimationFrame Scheduling For Nerds

我通过再想出一个问题,有没有什么办法,我们可以安排其在每一帧(见所附图片)刚刚皇家空军之前正确运行任务?

阅读

Life of a frame

1 个答案:

答案 0 :(得分:2)

首先,Chrome和Firefox在布局和绘制保罗在他的文章中解释的内容之前先运行rAF。 Safari and IE 有不同的行为,Edge is fixing;

现在让我们回到您的问题;考虑在每帧rAF回调之前,有一种方法可以让JS(我的任务)运行得更轻松。让我们假设“我的任务”执行大约需要4毫秒,而您的rAF回调大约需要5毫秒才能完成每一帧。这总共需要JS执行约9毫秒。那么这有什么意义呢?我们可以在大约9毫秒内在rAF回调中运行所有内容,换句话说,这相当于延长了rAF执行的时间:

在框架之前执行JS的总次数=执行我的任务代码+定期执行rAF代码

我们可以在rAF本身内部执行所有关键帧JS执行;没有必要将JS执行分为两部分(“我的任务” + rAF),因为在Layout和Paint之前您没有超过~10ms to execute rAF(JS代码),如果超过了fps下降,我们将看

TL:DR;在那个关键时刻,除了rAF回调之外,没有其他方法可以执行js了:)