前端性能优化:善用 requestAnimationFrame

举报
yd_284498617 发表于 2026/10/30 10:07:19 2026/10/30
【摘要】 在前端开发中,动画、滚动监听和 DOM 更新都是比较常见的场景。如果频繁操作 DOM 或执行复杂计算,很容易导致页面卡顿。requestAnimationFrame(简称 rAF)是浏览器提供的 API,可以帮助我们更合理地安排 UI 更新。 1. 什么是 requestAnimationFrame?requestAnimationFrame 会在浏览器下一次重绘之前执行回调函数,通常与屏幕...

在前端开发中,动画、滚动监听和 DOM 更新都是比较常见的场景。如果频繁操作 DOM 或执行复杂计算,很容易导致页面卡顿。

requestAnimationFrame(简称 rAF)是浏览器提供的 API,可以帮助我们更合理地安排 UI 更新。

1. 什么是 requestAnimationFrame?

requestAnimationFrame 会在浏览器下一次重绘之前执行回调函数,通常与屏幕刷新率保持同步。

function animate() {
  // 更新动画状态
  requestAnimationFrame(animate);
}

requestAnimationFrame(animate);

相比使用 setInterval 或 setTimeout 实现动画,rAF 更适合浏览器的渲染机制。

2. 优化高频事件

滚动、鼠标移动和窗口尺寸变化等事件可能在短时间内触发大量回调。

可以使用 rAF 合并同一帧内的多次更新:

let scheduled = false;

window.addEventListener('scroll', () => {
  if (scheduled) return;

  scheduled = true;

  requestAnimationFrame(() => {
    scheduled = false;

    // 执行滚动相关的 DOM 更新
    updatePosition();
  });
});

这样可以避免在一帧内重复执行大量不必要的更新。

3. 取消动画任务

如果组件已经销毁,或者动画不再需要执行,可以通过 cancelAnimationFrame 取消任务。

const id = requestAnimationFrame(() => {
  console.log('执行动画');
});

cancelAnimationFrame(id);

在 Vue、React 等框架中,尤其要注意组件卸载时清理尚未执行的动画任务。

4. 使用时需要注意

  • rAF 适合动画和视觉更新,不适合耗时计算。
  • 浏览器切换到后台时,rAF 可能暂停或降低执行频率。
  • 尽量避免在回调中频繁交替读取和修改 DOM,防止强制同步布局。
  • 不要把 rAF 当作通用的防抖或节流方案,它主要用于协调浏览器渲染。

总结

requestAnimationFrame 是前端性能优化中一个简单但实用的 API。

合理使用它,可以让动画和视觉更新更贴合浏览器的渲染节奏,减少不必要的重复工作,改善页面流畅度。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。