1.重排
如果通过js或者css修改元素的几何位置属性,例如改变元素的宽度、高度等,那么浏览器会触发重新布局,解析之后的一系列子阶段,这个过程就叫重排。重排需要更新完整的渲染流水线,所以开销也是最大的。
- 更新元素的绘制属性(重绘)
通过js更改某些元素的背景颜色,布局阶段将不会被执行,因为没有引起几何位置的变换,所以直接进入了绘制阶段,然后执行之后的一系列的子阶段,这个过程叫重绘制。相较于重排操作,重绘省去了布局和分层阶段,所以执行效率会比重排操作要高一些。
- 合成
如果更改一个既不需要布局也不需要绘制的属性,渲染引擎将会跳过布局和绘制,只执行后续的合成操作。利用css的transform实现动画效果,这可以避开重排和重绘,直接在非主线程上合成,并没有占用主线程,所以效率是最高的。