跳到主要内容

重排重绘

参考 什么是重排重绘,如何减少重拍重绘 什么是浏览器的关键渲染路径

关键渲染路径

浏览器将 HTML,CSS,JavaScript 转换为屏幕上所呈现的实际像素,这期间所经历的一系列步骤

所经历的步骤:

  1. 处理 HTML 并构建 DOM
  2. 解析 CSS 文件生成 CSSOM
  3. DOM 与 CSSOM 会一起生成 Render Tree,只包含渲染网页所需的节点
  4. Layout:计算每一个元素在设备视口内的确切位置和大小
  5. Paint:将渲染树中的每个节点转换成屏幕上的实际像素,这一步通常称为绘制或栅格化

重排与重绘

  1. 重排(Reflow):元素的位置发生变动时发生重排,也叫回流。此时在关键渲染路径中的 Layout 阶段,计算每一个元素在设备视口内的确切位置和大小。当一个元素位置发生变化时,其父元素及其后边的元素位置都可能发生变化,代价极高
  2. 重绘(Repaint): 元素的样式发生变动,但是位置没有改变。此时在关键渲染路径中的 Paint 阶段,将渲染树中的每个节点转换成屏幕上的实际像素,这一步通常称为绘制或栅格化

另外,重排必定会造成重绘

如何减少重排重绘

  • CSS 样式尽量批量修改
  • 避免使用 table 布局
  • 为元素提前设置好高宽,不因多次渲染改变位置