如何减少重排和重绘

1.回流的触发条件

重排也叫做回流,

简单来说,就是当我们对 DOM 结构的修改引发 DOM 几何尺寸变化的时候,会发生回流的过程。

比如一下情况:

     1.一个DOM元素的几何属性变化,常见的几何属性有width,height,padding,margin,left,top...

     2.DOM节点发生增减或者移动

     3.读写offset族,scroll族属性的时候,浏览器为了获取这些值,需要回流操作

     4.调用window.getComputedStyle方法

2.回流过程

触发回流的时候,如果 DOM 结构发生改变,则重新渲染 DOM 树,然后将后面的流程(包括主线程之外的任务)全部走一遍。

3.重绘的触发

当 DOM 的修改导致了样式的变化,并且没有影响几何属性的时候,会导致重绘(repaint)。

4.避免回流

1.一个 DOM 元素的几何属性变化,常见的几何属性有width、height、padding、margin、left、top、border 等等。

2.使 DOM 节点发生增减或者移动。

3. 读写 offset族、scroll族和client族属性的时候,浏览器为了获取这些值,需要进行回流操作。

4.调用 window.getComputedStyle 方法。

5.避免重绘

1. 避免频繁使用 style,而是采用修改class的方式。
2.使用createDocumentFragment进行批量的 DOM 操作。
3.对于 resize、scroll 等进行防抖/节流处理。
4.添加 will-change: tranform ,让渲染引擎为其单独实现一个图层,当这些变换发生时,仅仅只是利用合成线程去处理这些变换,而不牵扯到主线程,大大提高渲染效率。当然这个变化不限于tranform, 任何可以实现合成效果的 CSS 属性都能用will-change来声明。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值