崩溃的移动 Webkit

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费积分!

新设计发布后,最令人沮丧的事情之一是,公告博客文章会导致某些移动设备上的 Safari 崩溃。 它会使我的 iPhone 4S 崩溃,我听说有报告称它使其他 Android 设备崩溃,但它不会使我的 iPad 2 崩溃。 在移动设备上进行调试已经很难,但调试导致整个应用程序崩溃的页面则更加困难。

当然,我创建了 简化测试用例

会崩溃   不会崩溃

我的过程是复制导致崩溃的页面,然后逐步删除内容,直到找到不再崩溃的位置。 我最终删除了评论线程中的一个注释,它就不再崩溃了。 这两个文档代表着我所能得到的临界点。 它们都已删除所有 JavaScript。 它们都使用完全相同的 CSS。

以下是关于这两个文档的一些详细信息。

会崩溃 不会崩溃
文档大小(未解压缩) 131K 123K
文档大小(压缩) 20.21K 19.55K
请求数量 98 92
总页面大小 1.42MB 1.40MB

另一个重要细节:如果您隐藏其中任何一个的评论部分,它就不会崩溃。

这就是我在实时网站上采取的权宜之计。 您可以点击“查看评论”按钮来显示评论线程。 如果您点击此处这篇文章,它就会崩溃。

仅仅因为元素被隐藏并不意味着它们不在 DOM 中,所以我们可能可以排除 DOM 大小作为崩溃因素。

让所有评论都可见,确实会使用更多内存(可能多很多),而且还会使页面高度变得非常高。

另一个相关事实:删除 CSS 会停止崩溃。 CSS 未压缩时只有 37K,压缩后只有 7.32K。 不过,它确实包含一些 CSS3 内容,如渐变和盒阴影。

为什么我要发布这个?

科学! 我想让更多人看到这些简化的测试用例,看看我们是否可以进一步简化它们,并发现这个问题的根本原因。 用一些非常简单的 HTML 和 CSS 就可以让移动 WebKit 崩溃,这真是令人沮丧。 也许问题非常简单,然后我们可以广而告之。 出于我自己的目的,我可以修复这个该死的崩溃问题,而不必诉诸诸如分页评论之类的解决方案,我真的希望避免这种情况。