JavaScript 面试题
共 407 道 JavaScript 面试题。答案默认折叠,便于先自行作答。 1. requestAnimationFrame 与 requestIdleCallback 在渲染优化中的执行时机差异?谁优先触发? 难度:3 · 类型:QA 题目要点 requestAnimationFrame 在浏览器即将进行下一帧渲染之前执行,用于动画与视觉更新,优先级高于渲染阶段后的任务。requestIdleCallback 只会在当前帧所有渲染任务完成且仍有剩余时间时触发,属于低优先级空闲调度机制。因此在同一帧中,rAF 必然先于 rIC 执行。rAF 用于保证帧同步,rIC 用于利用空闲时间执行非关键任务。 参考答案 这个问题本质是理解 浏览器一帧的调度模型。 不搞清楚一帧里发生了什么,很容易回答成“谁快谁慢”这种表层结论。 核心结论先给出: 在有下一帧渲染需求的情况下,requestAnimationFrame 一定优先于 requestIdleCallback 执行。 requestIdleCallback 只会在当前帧还有“空闲时间”时才会触发。 下面从浏览器帧模型拆解。 一、浏览器一帧的基本流程 以 60fps 为例,一帧约 16.6ms。 一次完整渲染循环大致是: 执行宏任务(例如 setTimeout) 清空微任务队列 触发 requestAnimationFrame 回调 进行样式计算(Style) 布局计算(Layout) 绘制(Paint) 合成(Composite) 如果还有时间 → 执行 requestIdleCallback 需要明确一点: rAF 是“下一帧渲染前”的回调 rIC 是“当前帧剩余时间”的回调 二、requestAnimationFrame 的执行时机 requestAnimationFrame 的设计目标是: 在浏览器即将进行下一次重绘之前执行回调。 特点: 每帧最多执行一次 与刷新率同步 在样式计算之前触发 如果标签页不可见,会暂停 执行时机可以理解为: ...