极客时间返利平台,你可以在上边通过山月的链接购买课程,并添加我的微信 (shanyue94) 领取返现。

# 什么是重排重绘,如何减少重拍重绘

Issue

欢迎在 Gtihub Issue 中回答此问题: Issue 472 (opens new window)

重排和重绘是关键渲染路径中的两步,可以参考另一个问题: 什么是关键渲染路径 (opens new window)

  • 重排(Reflow):元素的位置发生变动时发生重排,也叫回流。此时在关键渲染路径中的 Layout 阶段,计算每一个元素在设备视口内的确切位置和大小。当一个元素位置发生变化时,其父元素及其后边的元素位置都可能发生变化,代价极高

  • 重绘(Repaint): 元素的样式发生变动,但是位置没有改变。此时在关键渲染路径中的 Paint 阶段,将渲染树中的每个节点转换成屏幕上的实际像素,这一步通常称为绘制或栅格化

另外,重排必定会造成重绘。以下是避免过多重拍重绘的方法

  1. 使用 DocumentFragment 进行 DOM 操作,不过现在原生操作很少也基本上用不到
  2. CSS 样式尽量批量修改
  3. 避免使用 table 布局
  4. 为元素提前设置好高宽,不因多次渲染改变位置
Last Updated: 11/27/2021, 6:11:48 PM