CSS3动画性能优化——让硬件加个速

本文探讨了CSS3动画性能优化,解释了浏览器渲染主流程,分析了动画卡顿的原因,并介绍了如何通过触发硬件加速和巧用will-change属性来提升动画性能。重点强调了transform和opacity的性能优势,以及使用will-change时的兼容性和注意事项。

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

最近翻阅了很多有关CSS3动画性能优化的技术博客,学到了很多东西,受益匪浅啊。多花一点时间也要把这篇文章撸出来。毕竟是干货满满的经验总结。

浏览器渲染主流程

当我们的渲染引擎取得了我们的文档内容之后它的基本流程是这样实现的:
解析html以构建树形的数据结构(dom tree) > 构建render树 > 布局render树 > 绘制render树
若对render树不清楚的,可以去看Render树与CSS解析

主线程的渲染流程,可以参考大部分浏览器渲染网页的流程:

  • 使用 HTML 创建文档对象模型(DOM)
  • 使用 CSS 创建 CSS 对象模型(CSSOM)
  • 基于 DOM 和 CSSOM执行脚本(Scripts)
  • 合并 DOM 和 CSSOM 形成渲染树(Render Tree)
  • 使用渲染树布局(Layout)所有元素
  • 渲染(Paint)所有元素

也就是说,主线程每次都需要执行Scripts,Render Tree ,Layout和Paint这四个阶段的计算。

动画卡顿的原因

导致这样动画卡顿的原因:主线程和合成线程调度不合理。
当我们把left、right、top、bottom设置为transition的值,会造成浏览器负担压力很大。
举个栗子
我们设置为margin-right:-30px渲染到0px。那么它的主线程会渲染从30-29-28-…-0.这样主线程就渲染了30次。再加上,合成主线程之后会绘制到GPU上再渲染到页面上。所以就是进行了30次主线程渲染,30次合成线程渲染,就是60次运算!

你这样做出来的动画,基本上都是卡顿状。这也是理所当然的,计算量这么大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

水果烫瓜皮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值