假设我们有一个60赫兹的刷新率,当浏览器完成画图时,应该以这个频率运行动画帧。如果浏览器执行多个微任务,并且它们(集体)占用超过1/60秒,而在该时间之后,微任务队列仍然不是空的,那么在此期间它会运行requestAnimationFrame
回调吗?还是会阻止此回调直到微任务队列为空?换句话说:requestAnimationFrame
回调可以在执行非空微任务队列的微任务之间运行吗?
如果答案是肯定的,那么我可以假设,当我的应用程序运行大量的微任务时,requestAnimationFrame
可以是提高应用程序响应性的一个好方法,对吗?
发布于 2022-08-24 18:09:41
做一个简单的例子证明requestAnimationFrame
会等待
const maxLoops = 10000000
let loopCount = 0
async function loop() {
loopCount += 1
if (loopCount >= maxLoops) return 'yes'
return Promise.resolve().then(loop)
}
Promise.resolve()
.then(() => loop())
.then(r => console.log('done', r))
.catch(console.error)
requestAnimationFrame(() => console.log('animation frame'))
https://stackoverflow.com/questions/73477611
复制相似问题