Tim*_*imo 81 css css3 hardware-acceleration css-transitions
我正在css3实验中移动6000个小div元素,使用从top: 0
转换top: 145px
到测试性能.
在谷歌浏览器上使用无硬件加速运行平稳.
如果我通过translateZ(0)
性能启用硬件加速变得可怕.
为什么会这样?
这是我的示例代码:http://dl.dropboxusercontent.com/u/17844821/tmp/hwtest.html
更新(2014-11-13):由于这个问题仍然引起人们的注意,我想指出问题本身似乎仍然存在,尽管在现代硬件上提供的演示中,所提到的口吃可能不再可见.较旧的设备可能仍然会出现性能问题.
mdd*_*ddw 98
我总是补充说:
-webkit-backface-visibility: hidden;
-webkit-perspective: 1000;
Run Code Online (Sandbox Code Playgroud)
使用3d变换时.甚至是"假的"3D变换.经验告诉我,这两条线总能提高性能,特别是在iPad上,而且在Chrome上.
我测试了你的例子,据我所知,它有效.
至于你问题的"为什么"部分......我不知道.3D变换是一个年轻的标准,因此实施起伏不定.这就是为什么它是一个前缀属性:用于beta测试.有人可以填写错误报告或问题并让团队进行调查.
2013年8月19日编辑:
这个答案有定期的活动,我只是失去了一个小时,发现IE10也需要这个.所以不要忘记:
backface-visibility: hidden;
perspective: 1000;
Run Code Online (Sandbox Code Playgroud)
添加空变换hack(translateZ(0)
)时动画较慢的原因是每个空3D变换都会创建一个新图层.当这些图层太多时,渲染性能会受到影响,因为浏览器需要向GPU发送大量纹理.
这个问题在2013年Apple的主页上被注意到,该主页滥用了null变换黑客.见http://wesleyhales.com/blog/2013/10/26/Jank-Busting-Apples-Home-Page/
OP也正确地注意到他们评论中的解释:
移动几个大物体比使用3D加速移动大量小物品更有效,因为所有3D加速层都必须转移到GPU并返回.因此,即使GPU做得很好,许多对象的传输可能也是一个问题,因此使用GPU加速可能不值得.
有趣.我尝试过使用一些选项about:flags
,特别是这些选项:
所有页面上的GPU合成在所有页面上使用GPU加速合成,而不仅仅是那些包含GPU加速层的合成.
GPU加速绘图启用合成时启用GPU加速绘制页面内容.
GPU加速画布2D通过使用图形处理器单元(GPU)硬件渲染,使用2D上下文实现更高性能的画布标签.
启用了那些,尝试了它并且在启用了复选框的情况下失败了(就像你一样).但后来我注意到另一种选择:
FPS计数器显示硬件加速处于活动状态时页面的实际帧速率(以每秒帧数 为单位).
鉴于标志描述中的亮点,我推测硬件加速实际上对我来说即使没有勾选复选框,因为我看到FPS计数器打开了以上选项!
TL; DR:硬件加速最终是用户偏好; 用虚拟强制它translateZ(0)
会引入冗余的处理开销,从而降低性能.
归档时间: |
|
查看次数: |
51478 次 |
最近记录: |