重绘和回流

338 阅读1分钟

浏览器渲染时html加载发生了什么

页面加载时,浏览器需要把获取的html代码解析成一个DOM树,css文件解析成CSSOM树,DOM树和CSSOM树组合后构建成render树。

回流的理解

当render树中元素的布局(如:尺寸、位置、隐藏/显示状态)发生改变时,会产生回流。

每个页面至少需要一次回流,在页面第一次加载的时候一定会发生回流,因为要构建render树。

在回流的时候,浏览器会使render树中受到印象的部分失效,并且重新构造这部分render树,完成回流后浏览器会重新绘制受到影响改变的部分到屏幕中,这个过程就是重绘

重绘的理解

在不影响布局的情况下,render树中的元素的外观(属性)发生改变时,会产生重绘。比如:background-color:red...

⭐️⭐️⭐️⭐️⭐️回流一定会产生重绘,重绘不一定会产生回流

下面重点来了:如何最小化回流和重绘

  • 当需要对元素进行复杂操作时,先对元素进行(display:'none')隐藏,操作完成之后再显示。
  • 当需要创建多个dom节点时,使用DocumentFragment创建完成后一次性的加入document
  • js的Layout属性值也会引起回流:可以先用变量存储起来,然后多次使用left产生一次回流。
  • 避免使用table布局(一但table中有一个元素出发回流,那么table中的所有元素都会回流)