【浏览器原理】重绘(Repaint)和回流(Reflow)

91 阅读1分钟

一、什么是重绘?【代价相对较小】

当元素外观发生变化(颜色、背景色、可见性等),但布局不变,浏览器只需绘制元素,无需重新计算布局。

二、什么是回流(重排)?【代价大,耗性能】

当页面的布局结构发生变化,比如元素尺寸、位置、内容改变,浏览器需要重新计算元素的几何信息并重新布局。

🔧如何优化页面性能?

回流 > 重绘 > 直接修改 DOM,优化重点是减少回流次数,批量操作和用好浏览器渲染机制

1. 减少回流操作

  • 批量修改结构样式,避免逐条修改触发多次回流。
  • 使用 class 替代频繁操作单个样式属性。
  • 使用 documentFragment 或离线 DOM 操作,最后一次性插入文档流。
  • 避免频繁读取会触发回流的属性,如 offsetWidthscrollTop,尽量缓存。

2. 减少重绘操作

  • 避免使用会频繁改变颜色等视觉属性的动画,用 CSS3 硬件加速(transform, opacity)。
  • will-change 提示浏览器做优化。

3. 使用虚拟DOM框架(React、Vue)减少直接操作DOM带来的性能开销。

4. 合并和节流事件,比如滚动和窗口大小变化事件。

5. 合理使用CSS动画代替JavaScript动画