重排、重绘、合成

602 阅读1分钟

重排、重绘、合成是三种不同的渲染路径,路径越长,生成图像花费的时间就越长。

一、重排

当通过js或者css修改元素的几何信息后,就会触发重排。

为什么呢?

因为在修改了元素的几何信息之后,也就意味着在生成布局树,计算布局信息以及之后的过程都要重新再来一遍。

二、重绘

当通过js或者css改变元素的颜色之类的样式时,就会发生重绘。

为什么呢?

改变了样式,意味着cssom树的改变,但是元素的几何信息并没有改变,因此渲染过程会跳过生成布局树,计算布局以及分层的部分,而直接进入绘制阶段。

三、直接合成

当我们使用transform时,会直接合成。

因为transform动画不需要布局、分层和绘制,直接到了合成阶段,transform是直接操作了图层的。一些渐变、动画、变形等都是直接在合成阶段的。

四、为什么css动画比js动画要快

当要进行一些几何变换,透明度变化等操作时,直接使用js,会牵扯到整个渲染流程,使用css,我们可以使用will-change属性来提前告诉渲染进程,我们要做变换,渲染进程就会将该元素抽成单独的一个图层,变化发生时,合成进程直接处理变换,不会牵扯到其他。

.box {will-change: transform, opacity;}