重排(Reflow):
重排是指浏览器重新计算元素的位置和大小。当改变影响元素几何属性的CSS属性时,比如宽度、高度、位置等,浏览器需要重新计算布局,这个过程比较消耗性能。
重绘(Repaint):
重绘是指浏览器重新绘制元素的外观,但不改变元素的几何属性。比如改变颜色、背景色、边框样式等,只需要重新绘制,不需要重新计算位置。
主要区别:
-
重排会影响其他元素,重绘只影响当前元素
-
重排的性能开销更大,重绘相对较轻
-
重排必然引起重绘,但重绘不一定引起重排
触发条件:
-
重排:改变尺寸、位置、显示隐藏等
-
重绘:改变颜色、背景、边框等
性能影响:
重排是性能杀手,会阻塞渲染,应该尽量避免。重绘虽然也有开销,但相对较小。
优化建议:
-
批量修改DOM
-
使用transform代替改变位置
-
避免频繁读取布局信息
理解这两个概念对前端性能优化很重要。