首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >手机js内存泄漏

手机js内存泄漏
EN

Stack Overflow用户
提问于 2012-11-05 11:09:30
回答 2查看 411关注 0票数 0

因此,我们的移动web应用程序中有内存泄漏。它没有在桌面上看到,但它崩溃移动Safari浏览器(iOS 4,5,6)和崩溃整个安卓操作系统(2.2.x版本)。

崩溃通常发生在网站长期开放的时候。

我们使用:

  1. 头js (用于js装载)
  2. yepnope (用于css加载)
  3. socket.io
  4. jquery移动电话

因此,我有以下问题:

  1. 下列哪一个库会导致内存泄漏?
  2. 我们应该检查使用jquery选择器的代码,还是应该仔细地使用socket.io?
  3. 如果我们在脚本中加载20+短脚本,脚本加载器(headjs,yepnope)会导致内存泄漏吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-05 11:35:40

如果你不小心的话,jQ手机就是已知会导致泄漏。总之,我认为您列出的所有4个工具包都可能导致问题,特别是当您将它们一起使用时。

也许您能做的最好的事情是尽可能坚持一个库,并集中精力使用它,使泄漏保持在最低限度。移动浏览器的问题是有更多的关闭-魔术正在进行,而且JS引擎还没有那么为人熟知/理解。如果您曾经尝试过为触摸设备编写JS事件委托代码,那么您一定已经注意到,这里只有数量惊人的闭包和DOM引用,而这些引用可能无法及时实现GC‘。你对此没什么可做的。

一般来说,我倾向于避免使用太多的lib (我是那些为了避免使用任何lib(诚实地说)而爬行的人之一),所以我可能受到了偏见。但是,您可以这样说: headjs和jQuery以所有可以想象的方式检查ready事件的趋势的结合可能会很麻烦:您正在动态加载新元素,您是否检查过这是否多次触发jQ的ready事件?如果是这样的话,您几乎肯定会一次又一次地绑定相同的处理程序。每个ajax请求也可能触发其他工具包来执行相同的任务,这可能再次触发jQuery,而后者又可能再次触发其他库,这.

你拿到照片了。虽然我不是专家,但我的猜测是,一个库可能触发另一个库,反之亦然,从而导致死锁场景。这是基于一段时间前遇到的类似问题的模糊回忆,以及您使用各种库动态加载脚本/CSS的事实,以及上次我检查时jQ并没有解除对所有ready侦听器的绑定。如果我的直觉是正确的,你可以用一个邪恶的全局变量来快速修正:

代码语言:javascript
运行
复制
var jQReady = false;
jQuery(document).load(function()
{
    if (jQReady === true)
    {//was loaded
        return;
    }
    jQready = true;//<-- set to true on first invocation of callback
});
票数 1
EN

Stack Overflow用户

发布于 2012-11-15 09:16:15

很酷,您发现了您的问题,但正如Elias所说,尝试减少您使用的框架的数量。

由于removing无论如何都依赖于jQuery (所以当您需要它时它就在这里),我强烈建议删除HeadJS & YepNope,并使用jQuery的$.get()加载您的资源。

不需要包含冗余功能。

尽管如此,我在head的最新版本中添加了css加载,但老实说,如果您已经使用了jquery &不要使用响应性设计部分,您就不需要它了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13230861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档