14

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

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

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


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

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

2 回答 2

27

并不是浏览器不能或不够智能以使用硬件加速。相反,您所指的仅适用于 WebKit,尤其是 WebKit 的移动版本。Firefox 和 IE 都对一切进行硬件加速,它们会自动将页面拆分为在 GPU 上合成的“层”。这就是为什么他们通常在渲染速度测试中超过 Chrome。另一方面,WebKit 从来没有真正适应过简单的层加速。

因为 Firefox 和 IE 可以在 Windows 平台上利用 Direct2D 渲染(每个绘图操作都是硬件加速的),所以本质上它们也能够进行硬件加速合成。如果他们只加速绘图操作而不是合成,他们首先会失去使用 Direct2D 的大部分速度优势,因为它需要在 GPU 和系统内存之间进行复制,这很慢。另一方面,我所知道的所有 WebKit 渲染后端都完全在软件中执行渲染,并且在它们合成时会产生复制到 GPU 的惩罚(如果正在使用 GPU 合成)。所以,它最终是一个权衡。如果您正在合成的图层不需要太多时间在 CPU 上渲染,则它不会

由于这一点,以及移动 GPU 的极其有限的特性,除了绝对需要时(例如,设置 3D 变换时),还没有一个 WebKit 浏览器开始进行自动硬件加速。如果你想要我的意见,我还要补充一点,我认为 WebKit 开发人员和支持公司的懒惰也是一个因素。使用 GPU 是 bug 的主要来源,因此他们更容易不使用它而不是修复问题。

顺便说一句,Firefox for Android 可以一直进行 GPU 合成,尽管您可能需要在 about:config; 中启用它。我不知道它是否默认开启。对于个人电脑,我建议使用 Firefox 或 IE 进行快速渲染。

编辑:我还应该补充一点,在最新版本的 Android 中,谷歌已经为 Skia 添加了硬件加速,它可以处理操作系统上几乎所有的 2D 渲染。目前还没有多少设备拥有这个功能,但这确实意味着在不久的将来,Android 上所有设备的性能都会得到改善。也就是说,我不知道他们的 Skia 实现是否可以像我们希望的那样与 OpenGL 无缝协作。在他们处理之前,合成仍然可能会产生一些额外的副本。

于 2012-01-30T18:04:45.670 回答
1

有关 webkit 方法的更多信息,Ariya Hidayat(webkit 评论者)为我们的博客写了一篇关于硬件加速和 webkit 的很好的介绍性博客文章。享受。

[关键是硬件加速会消耗大量内存,所以要明智。]

于 2012-01-30T18:24:40.900 回答