浏览器之硬件加速机制

硬件加速技术在WebKit中通过开启'ACCELERATED_COMPOSITING'宏实现,主要针对具有特定CSS属性的RenderLayer对象。当满足如3D转换、视频、Canvas、透明动画等条件时,对象变为合成层,利用GPU进行高效渲染。该机制减少了内存使用,优化了重绘性能,并对性能提升明显的元素使用独立层。硬件渲染过程包括确定合成层、绘制层及层的合成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

硬件加速技术是指:使用 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 坐标比自己小的兄弟节点,且该节点是一个合成层
这么做的原因有三个:
  1. 首先当然是合并一些 RenderLayer 层,这样可以减少内存的使用量;
  2. 其二是在合并之后,尽量减少合并带来的重绘性能和处理上的困难;
  3. 其三对于那些使用单独层能够显著提升性能的 RenderLayer 对象,可以继续使用这些好处。
硬件渲染过程

首先,WebKit 决定哪些些是合成层并为它们分配后端存储。

其次,WebKit 需要遍历和绘制每一个合成层,也就是每个合成层可能有一个或者多个 RenderLayer 对象。

最后,渲染引擎将所有绘制完的合成层合成起来,这个是由 WebKit 的移植来完成的

总结

硬件加速是指用GPU的硬件能力来渲染网页,GPU的主要作用是用来绘制3D图形并且有很好的性能,对于GPU绘图而言,通常不像软件渲染那样只是计算其中更新的区域,一旦有新的更新请求,如果没有分层,引擎可能会重新绘制所有的区域,因为计算更新部分对GPU来说可能耗费更多的时间,当网页分层之后,部分区域的更新可能只在一层或几层,而不需要更新整个网页,通过重新绘制网页的一个或几个层,并将它们和其他之前绘制完的层合成起来,既能使用GPU的能力,又能够减少重绘的开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值