requestAnimationFrame回调执行时机:在reflow还是repaint之前?
关于
window.requestAnimationFrame()回调执行时机的疑问解答 你的测试结论是正确的:window.requestAnimationFrame()(简称rAF)的回调确实是在重排(reflow/Layout)之前执行的,MDN的表述属于简化性描述,存在模糊空间。
浏览器的单帧渲染流程大致如下:
- 处理用户交互输入
- 执行所有rAF回调
- 样式计算(Recalculate Style)
- 布局(重排/Reflow)
- 绘制(重绘/Repaint)
- 图层合成(Composite)
从这个流程就能看出,rAF回调的执行时机早于重排和重绘。你提到的逻辑完全合理:如果回调在重绘前才执行,此时修改布局属性会触发额外的重排,导致当前帧来不及处理,只能推迟到下一帧,凭空增加16ms左右的延迟——这显然违背了rAF专为动画优化设计的初衷。
MDN之所以表述为“repaint前调用”,应该是把整个渲染流程做了简化,因为重绘确实是渲染流程的最后几步之一,站在“最终渲染前”的角度来说不算错误,但没有明确区分重排和重绘的顺序,容易让开发者产生误解。
内容的提问来源于stack exchange,提问作者euijin-kim
相关产品推荐
相关产品推荐

