性能优化:让滚动和动画流畅 requestAnimationFrame

文章探讨了如何通过防抖和节流技术限制函数执行频次,以解决滚动和动画导致的频繁回流和重绘问题。同时,介绍了requestAnimationFrame在控制页面帧渲染中的作用,以及避免在scroll事件中修改样式和使用pointer-events:none提升滚动性能的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 前提:滚动和动画会频繁的引起回流与重绘,操作卡顿问题

  • 防抖(debounce)与 节流(throttle)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟,假死或卡顿的现象。

  • window.requestAnimationFrame() 这个方法是用来在页面重绘之前,通知浏览器调用一个指定的函数,用于准确控制页面的帧刷新渲染,让动画效果更加流畅。频率是每秒 60 次,也就是 1000/60 ,触发频率大概是 16.7ms 。(当执行复杂操作时,当它发现无法维持 60fps 的频率时,它会把频率降低到 30fps 来保持帧数的稳定。)

  • 避免在scroll 事件中修改样式属性或将样式操作从 scroll 事件中剥离,因为如果你在 scroll 事件的处理函数中做了修改样式属性的操作,那么这些操作会被浏览器暂存起来。然后在调用 requestAnimationFrame 的时候,如果你在一开始做了读取样式属性的操作,那么这将会导致触发浏览器的强制同步布局。

  • 滑动过程中尝试使用 pointer-events: none 禁止鼠标事件,可用来提高滚动时的帧频。当滚动时,鼠标悬停在某些元素上,则触发其上的 hover 效果,多半导致滚动出现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

subsistent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值