Dom*_*nic 14 css css3 hardware-acceleration
现在有大量的网页建议您将这些规则添加到您的内容中以使其加速硬件:
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
Run Code Online (Sandbox Code Playgroud)
这总是让我感到很荒谬.为什么浏览器需要我的帮助来决定硬件加速?它会更快,对吗?那么为什么不这样做呢?为什么要等我"欺骗"浏览器呢?
提出这个问题的另一种方法可能是,为什么每个基线/重置样式表都不包含这些行
* {
transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);
}
Run Code Online (Sandbox Code Playgroud)
zhu*_*SFT 27
浏览器不能或不够智能,无法使用硬件加速.相反,你所指的只是真正适用于WebKit,特别是WebKit的移动版本.Firefox和IE都硬件加速所有内容,并自动将页面拆分为在GPU上合成的"层".这就是为什么他们通常会在渲染速度测试中击败Chrome.另一方面,WebKit从未真正适应过简单的层加速.
因为Firefox和IE可以利用Windows平台上的Direct2D渲染(每个绘图操作都是硬件加速的),所以基本上要求他们也能够进行硬件加速合成.如果他们只是加速了绘图操作而不是合成,那么他们首先会失去使用Direct2D的大部分速度优势,因为它需要在GPU和系统内存之间进行复制,这很慢.另一方面,我所知道的所有WebKit渲染后端都完全在软件中执行渲染,并且当它们合成时(如果正在使用GPU合成)会导致复制到GPU的损失.所以,它最终会成为一种权衡.如果您正在合成的图层不需要花费太多时间在CPU上进行渲染,那么在GPU上执行复制和复合并不总是有意义的.
由于这一点,以及移动GPU的极其有限的性质,WebKit浏览器都没有开始进行自动硬件加速,除非绝对需要(例如,在设置3D变换时).如果你想要我的意见,我还要补充一点,我认为WebKit开发人员和支持公司的懒惰也是一个因素.使用GPU是错误的主要来源,因此他们更容易不使用它而不是解决问题.
顺便说一下,Firefox for Android可以一直进行GPU合成,尽管你可能需要在about:config中启用它.我不知道它是否默认开启.对于PC,我建议使用Firefox或IE进行快速渲染.
编辑:我还应该补充一点,在Android的最新版本中,Google已经为Skia添加了硬件加速功能,Skia几乎可以处理操作系统上的所有2D渲染.野外设备还没有多少,但它确实意味着在不久的将来Android上的所有设备的性能都会提高.也就是说,我不知道他们的Skia实现是否与我们可能喜欢的OpenGL无缝协作.合成仍然可能会产生一些额外的副本,直到他们处理它.