requestAnimationFrame关联何种队列?面试相关疑问求解
关于requestAnimationFrame(rAF)的队列与Event Loop的疑问解答
rAF有专属调度时机,但并非独立的"队列类型"
面试官提到的"专属队列"其实是指rAF有专门的回调调度逻辑,但它不属于宏任务、微任务之外的第三种独立队列。浏览器会维护一个待执行的rAF回调列表,但这个列表的触发时机是固定绑定到浏览器渲染周期的:在每次重绘前的更新渲染阶段执行,这个阶段位于宏任务执行完毕、微任务队列全部清空之后,实际渲染操作之前。为何Event Loop讲解中很少提及它?
宏任务和微任务是HTML标准定义的Event Loop核心异步任务分类,覆盖了绝大多数通用异步场景(比如定时器、网络请求、Promise回调等)。而rAF的设计初衷是精准同步浏览器渲染节奏,专门用于动画、页面重绘优化这类场景,它的调度逻辑属于渲染流程的一部分,而非通用异步任务队列体系。因此在讲解Event Loop基础概念时,通常会聚焦宏/微任务这个核心框架,rAF作为特定场景的API,不会被当作基础分类提及。额外说明:rAF与宏/微任务的执行顺序
一个典型的执行流程是:- 执行当前同步代码
- 清空所有微任务队列中的回调
- 判断是否需要进行页面渲染,若需要则执行所有待处理的rAF回调
- 执行页面渲染操作(重排、重绘、合成)
- 从宏任务队列中取出下一个任务执行
内容的提问来源于stack exchange,提问作者b3rry
相关产品推荐
相关产品推荐

