iOS Safari使用“-webkit-transform”运行内存不足
http://jsfiddle.net/ES4xG/8/崩溃大多数视网膜设备。
iOS Safari使用一些-webkit-transform
指令时,“容易”内存不足,崩溃。 这种方法提供令人印象深刻的graphics,但特别是在视网膜显示器,似乎只消耗大量的内存,导致崩溃。
上面的演示显示了一个文本显示的150倍,否则将在PC浏览器上正常运行:
字体大小和元素数量被夸大,导致崩溃。 -webkit-transform: translate3d(0,0,0)
旨在强制GPU加速绘制每个元素。
在实际应用中,我们使用的是translateX
, Y
, Z
, scale
和其他似乎与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