浏览器渲染时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中的所有元素都会回流)