requestAnimationFrame 用于实现流畅的动画。浏览器会尽可能保证在下一次重绘之前调用其注册的回调函数。
特点与优势:
requestAnimationFrame 会自动暂停,从而节省 CPU 资源,这比使用定时器设置固定间隔要高效得多。浏览器主线程在每帧的时间(例如 16.6ms)内,除了处理用户输入、JavaScript 执行、布局和重绘外,如果还有剩余时间,这段时间就是空闲时间。requestIdleCallback 允许开发者将非紧急的后台任务安排在这些空闲时间内执行。
参数机制:
回调函数会接收一个 deadline 对象。通过调用 deadline.timeRemaining(),可以获取当前帧还剩下多少空闲时间。开发者可以根据这个剩余时间来决定是继续执行任务还是将任务切分推迟到下一个空闲回调中。
适用场景: 处理那些不影响初次渲染和用户交互的非关键任务,例如:
注意事项:
timeout 参数可以强制在超过指定时间后强制执行。| 特性 | requestAnimationFrame | requestIdleCallback |
|---|---|---|
| 触发时机 | 在下一次浏览器重绘画面之前执行 | 在帧与帧之间的剩余空闲时间执行 |
| 优先级 | 高,保证在每一帧按时执行 | 低,见缝插针执行,可能会被推迟 |
| 适用场景 | 动画渲染、高频的视觉更新计算 | 发送统计日志、处理可切分的运算 |