Javascript iOS上的Mobile Safari在大页面上崩溃

Javascript iOS上的Mobile Safari在大页面上崩溃,javascript,css,debugging,mobile-safari,Javascript,Css,Debugging,Mobile Safari,我有一个问题,当页面变得太大时,使用jQuery加载和操作DOM时,Mobile Safari会崩溃 我在iPhone和iPad上都遇到同样的问题 对移动页面进行故障排除以查找错误的最佳方法是什么?是否存在任何可能导致Mobile Safari崩溃的已知问题 任何iOS应用程序的主要问题都是内存使用。因此,很可能是您的页面使用了太多内存 MobileSafari使用了一些巧妙的技术,因此在任何给定的时间都不必将整个页面驻留在内存中,而只需将其中的一部分驻留在内存中。也许你可以检查一下你的页面中是

我有一个问题,当页面变得太大时,使用jQuery加载和操作DOM时,Mobile Safari会崩溃

我在iPhone和iPad上都遇到同样的问题


对移动页面进行故障排除以查找错误的最佳方法是什么?是否存在任何可能导致Mobile Safari崩溃的已知问题

任何iOS应用程序的主要问题都是内存使用。因此,很可能是您的页面使用了太多内存

MobileSafari使用了一些巧妙的技术,因此在任何给定的时间都不必将整个页面驻留在内存中,而只需将其中的一部分驻留在内存中。也许你可以检查一下你的页面中是否有任何东西破坏了这个机制或者降低了它的效率

在任何情况下,提供更多的切中要害的建议,更多关于你的页面的信息将是非常好的

顺便说一下,您可以从设备存储的崩溃日志中得到一些提示。检查是否可以在“设置”下找到它:

  • 一般的
  • 关于
  • 诊断和使用
  • 诊断和使用数据
  • 如果是内存问题,您应该找到类似“信号(0)”的内容;不确定这是否仅仅意味着“由于内存使用而被杀死”,但当我发现一个信号(0)时,我通常认为这是理所当然的

    否则,它可能会告诉你出了什么问题


    希望这能有所帮助。

    内存限制和Javascript执行时间限制都有,但实际上如何达到这些限制还是有点模糊。常见的报告是,页面大小大于10MB时会出现问题,Javascript执行时间限制为10秒


    有关更多信息,请参阅。

    我确实发现了问题。它不是像我想的那样使用JS,而是使用CSS。我添加了一个类来进行CSS转换,以淡入一些元素。对于匿名用户,这些元素具有
    display:none并且可能从未运行过不透明度转换

    奇怪的是,转换正好在两个元素上。那么,为什么这只会在有100多条注释的长线程上崩溃呢


    因此,底线是:-webkit转换使mobile safari上的页面崩溃。

    也有同样的问题,对我来说是
    -webkit转换:translateZ(0)

    我知道这个问题已经得到了成功的回答,但我也只想把我的五分钱放进去,因为我已经在这个问题上用头撞了好几次墙:

    正如大多数答案已经指出的,它通常归结为记忆问题。几乎任何东西都可以是最后一个在“内存堆”上翻转的位,就像
    translateZ
    或其他任何东西一样

    然而,根据我的经验,它与具体的CSS(或JS)命令无关。碰巧的是,上一次的过渡太多了


    对我有很大帮助的是将此时不可见的内容保存在
    display:none
    下。这听起来可能很原始,但实际上起到了作用。这是一种简单的方法,可以告诉浏览器的渲染器此时不需要此元素,从而释放内存。这允许您创建一英里长的垂直滚动条,只要您隐藏此时未使用的元素,就可以使用各种3d效果

    我也遇到了类似的问题,网页在安卓设备上运行得很好,在IOS(iphone和模拟器)上崩溃

    经过大量研究(同时使用ios_webkit_debug_代理),我发现问题与jQuery就绪事件有关

    添加一点超时解决了问题。我的应用程序也使用iframes

    $(document).ready(function () {
        window.setTimeout(function () { ready(); }, 10);
    });
    

    我最近遇到了一个问题,移动safari在包含大量图像(30+就足够了)和一些菜单转换的web应用程序页面上崩溃。经过多次尝试和错误,我找到了一个类似的解决方案,但使用angularjs实现了无限滚动。我在列表的顶部和底部使用了requestAnimFrame和两个展开/收缩div(带有js样式属性)来移除所有图像容器(顶部覆盖了其他内容),除了少数靠近视口的容器。滚动性能(本机,无js)良好,内存消耗得到控制。

    什么太大?它可以复制吗?您是否有一个工作示例来显示崩溃?您是否在其他浏览器(Chrome、FF)上进行过测试?同样的问题?这是一个论坛网站,当一个帖子得到超过100条评论时,它总是发生。我没有在我测试过的任何桌面浏览器上看到这一点,但当用户通过身份验证时,总是在mobile safari上。我想我已经把它缩小到了一大块JavaScript代码,但我仍然不太明白这是什么原因造成的。我猜我必须删除所有内容,然后逐点启用,然后查看它何时中断。一个可重复的示例是的主页,无论iOS设备中有多少可用内存,都会发生这种情况。这是嵌入式平台无需交换的必然结果。一旦主内存已满,内存不足错误将开始发生。如果10MB听起来很小,请记住Safari在任何时候都可以有很多打开的选项卡-尽管它会根据内存压力悄悄地丢弃隐藏选项卡的页面内容。@Marko这是一个明显的Safari错误,也是一个潜在的安全问题。当系统通知应用程序时,应用程序需要释放尽可能多的内存,并且不会崩溃。Safari应该在内存不足时拍摄快照并显示它们,或者在内存太多时禁用图像或截断页面。(非主题说明:SSD下的交换非常可怕。这就是为什么我为配备SSD的MBP购买了最大的RAM。因此,我可以尽可能地防止交换。这对苹果来说很好,因为苹果从未在我们的移动设备上启用它。)内存和时间限制似乎只适用于JavaScript。画布和JPEG也有一些限制。达到限制会停止网页,而不是Safari。显然,苹果公司