为什么浏览器不够聪明,硬件加速没有技巧?

时间:2012-01-30 17:34:21

标签: css css3 hardware-acceleration

现在有大量的网页建议您将这些规则添加到您的内容中,以使其加速硬件化:

transform: translate3d(0,0,0);
-webkit-transform: translate3d(0,0,0);

这总是让我觉得很荒谬。为什么浏览器需要我的帮助来决定硬件加速?它会更快,对吗?那么为什么不这样做呢?为什么要等我“欺骗”浏览器呢?


提出这个问题的另一种方式可能是,为什么每个基线/重置样式表都不包含行

* {
    transform: translate3d(0,0,0);
    -webkit-transform: translate3d(0,0,0);
}

2 个答案:

答案 0 :(得分: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中,谷歌已经为Skia添加了硬件加速功能,Skia可以处理几乎所有的操作系​​统2D渲染。野外设备还没有多少,但它确实意味着在不久的将来Android上的所有设备的性能都会提高。也就是说,我不知道他们的Skia实现是否与我们可能喜欢的OpenGL无缝协作。合成仍然可能会产生一些额外的副本,直到他们处理它。

答案 1 :(得分:1)

有关webkit方法的更多信息,Ariya Hidayat(webkit审阅者)为我们的博客写了pretty good introductory blog post on hardware acceleration and webkit。享受。

[最重要的是,硬件加速可以咀嚼大量内存,所以要明智。]