requestIdleCallback
#R1
#bom
目录
1. 定义
requestIdleCallback
允许开发者在浏览器的空闲时间执行后台或低优先级的任务。- 它的工作原理是利用浏览器的空闲周期来执行任务,而不会影响关键的渲染和交互操作
2. API
API: window.requestIdleCallback(callback[, options])
requestIdleCallback(myNonEssentialWork);
// 非必要任务
function myNonEssentialWork(deadline) {
// timeRemaining(): 返回当前空闲期还剩余的毫秒数
// didTimeout: 一个布尔值,表示任务是否已经超时
while (deadline.timeRemaining() > 0 && tasks.length > 0) {
doWorkIfNeeded();
}
if (tasks.length > 0) {
requestIdleCallback(myNonEssentialWork);
}
}
3. 使用场景
requestIdleCallback
主要用于执行非必要的后台任务或计算,例如:
- 数据预加载
- 长列表的渐进式渲染
- 复杂计算的分割执行
- 非关键数据的处理和分析
- 大量 DOM 操作:
- 例如,动态插入大量 DOM 元素时,可以使用
requestIdleCallback
分批处理,避免长时间阻塞主线程。
- 例如,动态插入大量 DOM 元素时,可以使用
- 数据处理:
- 处理大量数据或执行复杂计算时,可以将任务分割并在空闲时执行。
- 预加载:
- 在用户不活跃时预加载资源或数据
4. 它影响了React Fiber 架构设计
React 的 Fiber 架构 在内部实现了类似 requestIdleCallback
的机制,用于将渲染工作分割成小块,在浏览器空闲时执行。
- 这允许 React 在不阻塞主线程的情况下进行复杂的更新操作
5. 注意
- 不要在
requestIdleCallback
中执行 DOM 操作,因为它可能会触发重排或重绘,影响性能 - 对于有时间限制的任务
- 应该使用 setTimeout 或 requestAnimationFrame,而不是 requestIdleCallback