因此,我们的移动网络应用程序中存在内存泄漏。它没有在桌面上看到,但它崩溃移动Safari浏览器(iOS 4,5,6)并崩溃整个Android OS(在版本2.2.x上检查)。
当网站长时间处于打开状态时,通常会发生崩溃。
我们使用:
所以我有以下问题:
答案 0 :(得分:1)
jQ mobile是known to cause leaks。总而言之,我认为您列出的所有4个工具包都可能导致问题,尤其是当您一起使用它们时。
也许你能做的最好的事情就是尽可能地坚持使用一个库,并专注于以泄漏保持在最低限度的方式使用它。移动浏览器的问题在于,有更多的封闭魔法正在进行,而JS引擎并不是那么熟知/尚未理解。如果你曾经为触摸设备编写JS事件委托代码,你必须注意到只有大量的闭包,以及可能无法及时获得GC的DOM引用。你可以做很多事情。
一般情况下,我倾向于避免使用过多的库(我是其中一个人会为了避免使用任何库来实现这一点,所以我可能会受到偏见)。但是你提出过哪种方式:headjs和jQuery以你能想象的方式检查ready
事件的倾向的组合可能很麻烦:你是动态加载新元素,你检查一下是否会触发jQ的多次ready
次活动?如果确实如此,你几乎肯定会一遍又一遍地绑定相同的处理程序。每个ajax请求也可能触发其他工具包也做同样的事情,这可能会再次触发jQuery,这反过来可能会再次触发其他lib,这... ...你得到了图片。虽然我不是专家,但我的猜测是,一个lib可能触发另一个,反之亦然,导致死锁情况。我基于对我前一段时间遇到的类似问题的模糊回忆,以及你使用各种库动态加载脚本/ CSS的事实,以及jQ没有解除所有{{{{{{{ 1}}听众上次我查了一下。如果我的预感是正确的,你可以使用邪恶的全局变量作为快速修复:
ready
答案 1 :(得分:1)
很酷,你发现了你的问题,但正如Elias所说,尝试减少你使用的框架数量。
由于JQ Mobile依赖于jQuery(所以当你需要时它就在那里),我强烈建议删除HeadJS& YepNope,并使用jQuery的$ .get()加载资源。
无需包含冗余功能。
那就是说,我把css加载到最新版本的头部,但老实说,如果你已经使用了jquery&不要使用响应式设计部件,你真的不需要它。