iOS Safari使用“-webkit-transform”运行内存不足

http://jsfiddle.net/ES4xG/8/崩溃大多数视网膜设备。

iOS Safari使用一些-webkit-transform指令时,“容易”内存不足,崩溃。 这种方法提供令人印象深刻的graphics,但特别是在视网膜显示器,似乎只消耗大量的内存,导致崩溃。

上面的演示显示了一个文本显示的150倍,否则将在PC浏览器上正常运行:

字体大小和元素数量被夸大,导致崩溃。 -webkit-transform: translate3d(0,0,0)旨在强制GPU加速绘制每个元素。

在实际应用中,我们使用的是translateXYZscale和其他似乎与GPU使用相同的方式。 图像和精灵也被使用,但它们并没有直接连接到崩溃。

鉴于以上情况:

1)iOS Safari崩溃了吗?

2)插入苹果公司仪器内存监视器,虚拟内存攀升,似乎是崩溃的罪魁祸首。 究竟是什么使用这个内存?

3)有没有其他GPU加速的方法,不会消耗大量的内存?

它崩溃,因为在你的例子中,所有硬件加速项目的高度是257,025px。 在我的testing中,似乎移动Safari浏览器在崩溃之前可以处理大约20,000px的高度。

硬件加速是可怕的,但不要滥用它的一切。

为了帮助您进行debugging,您需要使用以下键从terminal在Mac上运行Safari:

 $> export CA_COLOR_OPAQUE=1 $> export CA_LOG_MEMORY_USAGE=1 $> /Applications/Safari.app/Contents/MacOS/Safari 

CA_COLOR_OPAQUE显示哪些元素被加速.CA_LOG_MEMORY_USAGE显示多less内存用于渲染。

有关详细信息,请参阅以下链接:

尝试在正在转换的元素的父级上使用它

 -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; transform-style: preserve-3d; 

这对你的转换元素有更好的performance

 -webkit-backface-visibility: hidden; -moz-backface-visibility: hidden; backface-visibility: hidden; 

Google Chrome在文本上运行-webkit-transform Javascriptanimation后崩溃了几分钟。 我已经使用了rotate()rotateZ() ,尤其是当看到animation的文本时,操作系统报告的内存使用情况一直持续到Aw,Snap! 发生错误。

使用Google Chrome 31.0.1650.63,Blink引擎537.36,在Windows 7 64位下。

在Firefox 25.0.1上testing了相同的animation,没有发现问题。

我甚至认为特里斯坦引擎(我自己的JS库)有严重的内存泄漏,但在开发人员>时间线内存图上检查,并没有显示任何迹象。

对图像或空DIV进行-webkit-transform不会显示此错误。

使用简单的CSS2属性(如left:top: :)animation相同的文本不会显示此错误。

已经在Google上提交了一个错误报告。 花了我三个小时弄清楚什么是错的。

错误报告: https : //code.google.com/p/chromium/issues/detail? id = 328245 & thanks = 328245 & ts =1386906785