因此,我们的移动web应用程序中有内存泄漏。它没有在桌面上看到,但它崩溃移动Safari浏览器(iOS 4,5,6)和崩溃整个安卓操作系统(2.2.x版本)。
崩溃通常发生在网站长期开放的时候。
我们使用:
因此,我有以下问题:
发布于 2012-11-05 11:35:40
如果你不小心的话,jQ手机就是已知会导致泄漏。总之,我认为您列出的所有4个工具包都可能导致问题,特别是当您将它们一起使用时。
也许您能做的最好的事情是尽可能坚持一个库,并集中精力使用它,使泄漏保持在最低限度。移动浏览器的问题是有更多的关闭-魔术正在进行,而且JS引擎还没有那么为人熟知/理解。如果您曾经尝试过为触摸设备编写JS事件委托代码,那么您一定已经注意到,这里只有数量惊人的闭包和DOM引用,而这些引用可能无法及时实现GC‘。你对此没什么可做的。
一般来说,我倾向于避免使用太多的lib (我是那些为了避免使用任何lib(诚实地说)而爬行的人之一),所以我可能受到了偏见。但是,您可以这样说: headjs和jQuery以所有可以想象的方式检查ready事件的趋势的结合可能会很麻烦:您正在动态加载新元素,您是否检查过这是否多次触发jQ的ready事件?如果是这样的话,您几乎肯定会一次又一次地绑定相同的处理程序。每个ajax请求也可能触发其他工具包来执行相同的任务,这可能再次触发jQuery,而后者又可能再次触发其他库,这.
你拿到照片了。虽然我不是专家,但我的猜测是,一个库可能触发另一个库,反之亦然,从而导致死锁场景。这是基于一段时间前遇到的类似问题的模糊回忆,以及您使用各种库动态加载脚本/CSS的事实,以及上次我检查时jQ并没有解除对所有ready侦听器的绑定。如果我的直觉是正确的,你可以用一个邪恶的全局变量来快速修正:
var jQReady = false;
jQuery(document).load(function()
{
if (jQReady === true)
{//was loaded
return;
}
jQready = true;//<-- set to true on first invocation of callback
});发布于 2012-11-15 09:16:15
很酷,您发现了您的问题,但正如Elias所说,尝试减少您使用的框架的数量。
由于removing无论如何都依赖于jQuery (所以当您需要它时它就在这里),我强烈建议删除HeadJS & YepNope,并使用jQuery的$.get()加载您的资源。
不需要包含冗余功能。
尽管如此,我在head的最新版本中添加了css加载,但老实说,如果您已经使用了jquery &不要使用响应性设计部分,您就不需要它了。
https://stackoverflow.com/questions/13230861
复制相似问题