动画02 浏览器的重绘与重排以及动画性能优化

本文详细介绍了浏览器的渲染过程,包括处理DOM和CSS生成渲染树,以及重排和重绘的概念。重点讨论了重排的影响因素和避免重排的策略,如分层、分离读写操作、样式集中改变等。还提出了使用CSS动画以减少性能损耗,并提供了性能优化的实践建议,如利用硬件加速和避免不必要的重排、重绘。

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

浏览器渲染过程

大体上,浏览器渲染过程分为5步

  1. 处理HTML生成DOM树
  2. 处理CSS生成样式树
  3. 将DOM树和样式树合并为Render树(渲染树)
  4. 对Render树进行布局计算,生成盒模型
  5. 绘制信息
  6. 合成涂层(复合层)

要注意的是,UI的重绘是在Event Loop中的Marco Task队列中进行的

分层

上面的渲染过程,总共有三个Layer:

  1. Layout Layer, 布局层,将元素防止在屏幕上,形成Dom树
  2. Render Layer, 渲染层,处理层叠关系,透明度等,形成Render树
  3. Composite Layer, 复合层,利用GPU单独进行渲染的Layer

重排(reflow)

当改变了影响布局元素的CSS样式,比如widthheightlefttop等(transform除外),浏览器会将当前的Layout标记为dirty,这会让浏览器在下一帧进行全局的重排。

要注意,重排发生在下一帧、下一次渲染的时候,并非在JS语句执行后立刻执行。

在当前Layer标记为dirty的情况下,当读取元素的offsetTopscrollHeight几何属性时,浏览器也会立即重排,保证在JS获取到的属性是正确的。

这一过程会将本在渲染正常流程中执行的重排提前到JS执行过程中,会延缓执行效率。

会触发重排的操作有:

  1. DOM元素的几何属性变化
  2. DOM树的结构变化,节点增减、移动等
  3. 元素内容改变
  4. 页面渲染初始化(无法避免)
  5. 浏览器窗口尺寸变化
  6. 读取OffsetLeftOffsetHeightclientWidthoffsetTopgetComputedStyle等属性</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值