更新2018-03-01: 这个问题在版本66中已得到修复。在Android Chrome Dev和Canary中测试了许多页面,即使在长时间和/或重度运行期间也没有发现崩溃。我从来没有找到过解决方法,但66应该很快就会进入Chrome测试版,而且在Stable之后不会太久,所以普通用户应该能够在几周(几周)内在常规版Chrome中再次在Android上运行它们。顺便提一下,这与Chrome将完全停止对基于Symantec-CA的HTTPS / SSL证书的信任的更新相同。我注意到它与以前相比似乎略显笨拙,但必须进行测试,因为这对我来说可能仅仅是主观的,或者是由于我的代码中的变化寻找变通方法。更多信息可以在下面链接的Chromium Bug报告中找到。
**注意:如果你已经关注过这篇文章......我不得不承认我认为我有一个解决方法,将值四舍五入到只有两位小数。然而,我后来才意识到这导致了一些副作用(因为我做了一个优化)将一些元素缩放到0,0,0,这实际上导致它们不被渲染,因此不会触发问题很久。当我暂时删除缩放时,再次呈现所述元素,并触发了错误。深刻而又笨拙的应用,但是 - 问题没有解决。所以,我删除了我的答案。以下是我尝试过的一些事情,但都没有成功:
将十进制值舍入到x.xx,两位数。
将变换值舍入为直整数。
使用setInterval而不是RAF来查看这是否是一个因素(呃!)。
使用样式标记和.innerHTML通过css而不是DOM设置动态变换(这非常有效,但仍然会引发崩溃。
我已经尝试将其缩小到特定的变换参数,数字模式,元素嵌套深度,几乎我可以想到的任何事情来触发崩溃,看起来只有一种模式:每次你做了转变,有可能发生崩溃。它看起来很小,但是做脚本动画,即使你进行了优化以防止重复相同的变换,也会使崩溃不可避免。我可以花更长的时间,但我无法阻止它。
现在,我已经在网上看到过类似的报告,这些报道是关于自11月以来Chrome中最近出现的CSS问题,当时版本62更新被推送到稳定频道。最后一次测试,使用动态生成的嵌入式样式表来更新变换,这一点特别令人不安。除了等待版本67时,chrome.org表示修复应该出来,似乎没有办法绕过它。对于典型的Android用户来说,这需要几个月的时间。
此问题也不会降级为脚本动画。我也看到了CSS动画和过渡报告的类似问题。
我已经完成了从过去尝试过多个动画引擎的程度,所有这些都在版本61上运行得很好,直到RAF可用。我甚至为此编写了新的简单测试引擎。我尝试过其他一些开发者引擎。仍然崩溃。
此时,我认为唯一可以做的就是等待修复,并且可能得到足够多的人的足够关注,希望他们能够优先考虑。
他们在票证中说它是代码优化的问题。我真的希望看到他们在第65版之前将其恢复到稳定频道之前,因此普通用户不会很快看到这个问题。还有时间生成另一个版本并在此之前将其删除。任何想要看到这种情况的人,请到下面的链接,将你的两分钱放在chromium.org的票上。
上一次更新:此问题现已在chromium.org上经过测试和确认,是GPU光栅化代码中的一个错误,影响到Android版Chrome 66,并在版本62.0.3197.0之后出现(最后一次构建未受影响) 。他们的工程师正在努力修复它。
对于遇到此问题的任何人,我都是开放的,因此他们不会认为这是他们的代码存在问题,以防万一有人碰巧阅读它可能有助于修复或提供合理的解决方法,直到修补版本发布。如果有人找到解决方法,请在此处提供答案。
对于有兴趣的人,下面是票证的链接。以下是错误报告的摘录:
在Android中测试了该问题并能够重现该问题。
随后的步骤: 1.推出Chrome浏览器。 2.导航到URL:https://keithclark.co.uk/labs/css-fps/ 3.点击任何选项卡并尝试访问游戏 4.观察到Chrome被绞死。
Chrome版测试: 64.0.3282.116稳定/测试版,65.0.3325.16(dev)66.0.3328.0(金丝雀)
操作系统:Android 8.1.0
Android设备:Pixel
使用提供bisect结果的per-revision bisect,Good Build - 62.0.3197.0(497604)Bad Build - 62.0.3198.0(497674)
您正在寻找在497614(GOOD)之后进行的更改,但之前 497615(BAD)。
此前:
不确定这是否是Javascript,CSS或Android问题 - 但这里有......
基本问题:我需要做些什么来保持我的网页使用脚本化的RAF 3D转换锁定Chrome vs. 62及以上版本的Android?还有其他人有这个问题吗?
**注意:此问题实际上可能是Chromium问题。我已经用Chromium Project打开了一个bug报告。有兴趣的人可以在这里查看门票:https://bugs.chromium.org/p/chromium/issues/detail?id=805525
我现在暂时离开,这样他们就可以查看完整的说明了,如果事实证明我可以通过更改我的代码来修复自己的页面。但是,请继续阅读......;)
背景: 我的网页在61及以下版本上运行良好。我最近手动将Samsung Note 3上的Chrome更新到版本63稳定版,并发现在requestAnimationFrame循环上运行的复杂嵌套3D变换的每个页面(不仅仅是我的)会锁定浏览器。一个完美的例子是来自Keith Clark的页面,他有一个CSS/HTML/Javascript proof-of-concept demo of a First-Person Shooter。现在,移动版本在我的手机上运行得很好。更新后,它会锁定。我的页面工作得非常好,即使在弱设备上也是如此,直到这次更新。
我把它缩小了一点。如果我清除缓存并卸载更新,那么Chrome(41)库存可以很好地运行这些东西。安装更新到63,62,64(beta),同样的问题。我无法记住,如果我测试了60或61,但更新到版本59,我们仍然是金色的。 Firefox很好。歌剧很好,Opera。桌面上的相同更新运行良好。
我不完全确定的是我的手机是否有问题。没有其他问题。我知道它有点老了,但它仍然会让大多数移动设备下架。 Android版本5,Lollipop。根。如果有任何重要的话。恶意软件扫描总是在我试过的任何AV / M应用程序中产生0。我非常小心。
无论如何,如果其他人有这个问题,或者知道它......
我需要更改代码才能使其与Android上的当前Chrome兼容?这是我需要用代码解决的问题吗?我到处寻找,但似乎无法专门找到它的信息。我只能说它打破了我的动画。我甚至无法使用开发工具来解决这个问题,因为从我的计算机上运行性能检查会导致我的手机崩溃,导致Chrome死机并失去连接和获得的任何性能数据,并随身携带我的手机壁纸!
我没有从我的剧本中发现任何错误 - 这是相当基本的。我将它剥离为裸骨,因为我认为我有一个运行时错误,但没有。 Chrome for Android解释CSS或进行分层或其他什么方式有变化吗?
真诚的道歉,如果这最终是偏离主题,因为我不完全确定这是编码问题,还是特别是我的手机问题。如果它是编码问题,那就是我需要知道的 - 以及如何解决它。