重排(Reflow):

重排是指浏览器重新计算元素的位置和大小。当改变影响元素几何属性的CSS属性时,比如宽度、高度、位置等,浏览器需要重新计算布局,这个过程比较消耗性能。

重绘(Repaint):

重绘是指浏览器重新绘制元素的外观,但不改变元素的几何属性。比如改变颜色、背景色、边框样式等,只需要重新绘制,不需要重新计算位置。

主要区别:

  • 重排会影响其他元素,重绘只影响当前元素

  • 重排的性能开销更大,重绘相对较轻

  • 重排必然引起重绘,但重绘不一定引起重排

触发条件:

  • 重排:改变尺寸、位置、显示隐藏等

  • 重绘:改变颜色、背景、边框等

性能影响:

重排是性能杀手,会阻塞渲染,应该尽量避免。重绘虽然也有开销,但相对较小。

优化建议:

  • 批量修改DOM

  • 使用transform代替改变位置

  • 避免频繁读取布局信息

理解这两个概念对前端性能优化很重要。