您是对的,CSS 2D 变换在 Mobile Safari 中不是硬件加速的,但 3D 变换是。我不确定为什么会这样,但也许他们认为这对于大多数 2D 变换来说太过分了。不必要地使用 GPU 可能会对电池寿命产生不利影响。
将 2D 变换转换为 3D 变换非常容易,因此不是什么大问题。一种技巧是使用translateZ(0),如下所述:http://creativejs.com/2011/12/day-2-gpu-accelerate-your-dom-elements/ http://creativejs.com/2011/12/day-2-gpu-accelerate-your-dom-elements/
EDIT
苹果在他们的文档中没有提及任何相关内容,因此很难获得权威来源。以下是苹果公司的 Dean Jackson 对此的评价(摘自http://mir.aculo.us/2010/08/05/html5-buzzwords-in-action/ http://mir.aculo.us/2010/08/05/html5-buzzwords-in-action/):
本质上,任何将 3D 操作作为其功能之一的变换都会触发硬件合成,即使实际变换是 2D,或者根本不执行任何操作(例如 translate3d(0,0,0))。请注意,这只是当前的行为,将来可能会发生变化(这就是我们不记录或鼓励它的原因)。但在某些情况下它非常有帮助,可以显着提高重绘性能。
Sencha 的 Ariya Hidayat 写了一篇文章解释移动浏览器上的硬件加速:http://www.sencha.com/blog/understanding-hardware-acceleration-on-mobile-browsers/ http://www.sencha.com/blog/understanding-hardware-acceleration-on-mobile-browsers/。这是该帖子的一个片段:
将CSS转换矩阵设置为translate3d或scale3d(即使不涉及3D)的最佳实践来自于这样一个事实:这些类型的矩阵会将动画元素切换为拥有自己的层,然后将其与网页的其余部分和其他层。但您应该注意,创建和合成图层是有代价的,即内存分配。为了硬件加速而盲目地合成网页中的每个小元素是不明智的,你会吃掉内存。
这是 html5rocks.com 上的一篇讨论硬件加速的文章:http://www.html5rocks.com/en/tutorials/speed/html5/ http://www.html5rocks.com/en/tutorials/speed/html5/。这是其中的一个片段:
目前,大多数浏览器仅在有强烈迹象表明 HTML 元素将从中受益时才使用 GPU 加速。最明显的迹象是对其应用了 3D 变换。现在您可能并不真正想要应用 3D 变换,但仍然可以从 GPU 加速中获益 - 没问题。简单地应用恒等变换:
-webkit-transform: 翻译Z(0);
Firefox 和 Internet Explorer 已经使用硬件加速进行 2D 转换,因此如果 WebKit 浏览器(Chrome、Safari)在不久的将来包含它,我不会感到惊讶。