重排和重绘
定义:
当DOM的变化引发了元素几何属性的变化,比如元素的宽高,元素的位置,导致浏览器不得不重新计算元素的几何属性,并重新构建渲染树,这个过程称为“重排”。完成重排后,要将构建的渲染树渲染到屏幕上,这个过程称为“重绘”。
简单来说,重排负责元素的几何属性更新,重绘负责元素的样式更新。并且,重排必然带来重绘,但重绘未必带来重排。比如,改变某个元素的背景,这个就不涉及元素的几何属性,所以只发生重绘。
触发机制:
重排发生的根本原理就是元素的几何属性发生了改变,那么我们就能从改变元素几何属性的角度入手。
- 添加或删除可见的DOM元素
- 元素位置改变
- 元素本身尺寸发生改变
- 内容改变
- 页面渲染初始化
- 浏览器窗口大小发生改变
最小化重绘和重排:
- 浏览器自动对重排进行优化,对改变的DOM节点进行依赖收集,确认没有改变的节点,就进行一次更新。
- js代码优化。(主要包括:尽量减少、避免无意义的DOM操作;方案优化,用其他可行方法替代DOM操作;将多次dom操作收集到一块,一次性执行多次DOM操作)