硬件加速技术是指:使用 GPU 的硬件能力为帮助渲染网页, GPU 的作用主要是用来绘制 3D 图形并且性能特别好。
对于 GPU 绘图而言,当网页分层之后,部分区域的更新可能只在网页的一层或者几层,而不需要将整个网页都重新绘制。 通过重新绘制网页的一个或者几个层,并将它们和其他之前绘制完的层合成起来,既能使用 GPU 的能力,又能减少重绘的开销。
在 WebKit 中,只有把编译的 C 代码宏(macro)“ACCELERATED_COMPOSITING” 打开之后,硬件加速机制才会被开启,有关硬件加速的基础设施才会被编译进去。
如果一个 RenderLayer 对象具有以下特征之一,那么它就是合成层。
- RenderLayer 具有 CSS 3D 属性或者 CSS 透视效果。
- RenderLayer 包含的 RenderObject 节点表示的是使用硬件加速的视频解码技术的 * HTML5 “video” 元素。
- RenderLayer 包含的 RenderObject 节点表示的是使用硬件加速的 Canvas 2D 元素或者 WebGL 技术。
- RenderLayer 使用了 CSS 透明效果的动画或者 CSS 变换的动画。
- RenderLayer 使用了硬件加速的 CSS Filters 技术。
- RenderLayer 使用了剪裁(Clip)或者反射(Reflection)属性,并且它的后代中包括一个合成层。
- RenderLayer 有一个 Z 坐标比自己小的兄弟节点,且该节点是一个合成层
这么做的原因有三个:
- 首先当然是合并