一、重绘不一定需要重排,重排必然会导致重绘
1、重排:当我们改变一个元素的尺寸和位置时候,会重新进行样式计算、布局、绘制以及后面的所有流程,这种行为称为重排。
1)添加、删除可见的dom
2)元素的位置改变
3)元素的尺寸改变(外边距、内边距、边框厚度、宽高等几何属性)
4)页面渲染初始化
5)浏览器窗口尺寸改变
2、重绘:当改变了某个元素的颜色属性时不会重新触发布局,但还是会触发样式的计算和绘制,这就是重绘。
二、减少重排、重绘
1、不要一条一条的修改DOM的样式,可以先定义好css的class,然后修改DOM的className。
2、不要把DOM结点的属性值放在一个循环里当成循环里的变量。
3、为动画的HTML元件适用fixed或absolute的position,那么修改他们的css是不会reflow
三、我们可以发现重绘和重排都会占用主进程,还有js也会运行在这个主线程上,所以就会出现抢占执行时间的问题,如果你写了一个不断导致重排重绘的动画,浏览器则需要在每一帧都运行样式计算布局和绘制的操作。