【问题标题】:System hang after running javascript over night夜间运行 javascript 后系统挂起
【发布时间】:2012-07-03 10:23:28
【问题描述】:

我的 javascript 非常简单。它只是不断调用 ajax 来下载数据并将其显示在我的屏幕上。我通过直接更新数据来重用这些 DOM 元素(使用 jquery 的 $(DIV).empty() 函数,然后 appendTo 另一个内容)。但是,一夜之间运行后,我的电脑死机了,并且似乎在继续做某事。

我尝试观察一些 Firefox 插件的内存消耗。运行两个小时,内存可能会增长 200MB,但不知道是我的 js 还是其他原因造成的。

我对这个问题有一些疑问。 1.有什么好的监控方法(比如具体网页占用多少内存,占用多少CPU资源,如何监控?) 2.有没有什么通用的方法来设计js web app来避免这样的问题?

谢谢,欢迎评论!

【问题讨论】:

  • 您使用的是哪个浏览器? (编辑:哦,我看到了 FF)。你用各种浏览器重复实验了吗?
  • 您已经在使用萤火虫探查器了吗?有了它,你可以看到你的通话去向。
  • 您是否考虑过从不同的角度解决问题。不用ajax,直接用meta-refresh标签重新加载页面?

标签: javascript jquery html memory-management memory-leaks


【解决方案1】:

某些版本的 Firefox 使用引用计数作为垃圾收集策略。引用计数在某些情况下容易导致内存泄漏。

Internet Explorer 和 Mozilla Firefox 是最常用的两种 Web 浏览器 通常与 JavaScript 中的内存泄漏有关。罪魁祸首在 两个浏览器都是用来管理 DOM 的组件对象模型 对象。本机 Windows COM 和 Mozilla 的 XPCOM 都使用 用于内存分配的引用计数垃圾收集和 恢复。引用计数并不总是与 用于 JavaScript 的标记和清除垃圾收集。本文 专注于解决 JavaScript 代码中内存泄漏的方法。看 了解更多关于 Firefox 中的 COM 层内存处理的资源和 即。

来自http://www.ibm.com/developerworks/web/library/wa-memleak/

【讨论】:

    【解决方案2】:

    我预感到内存消耗是因为在 jQuery 中,每次完成 ajax 调用时,都会创建一个 jqXHR 来管理请求和后续处理(回调、状态检查等)。我在 jQuery 文档中看不到任何这些自动被清除的内容。所以,你的 javascript 只是在堆积它们。

    http://api.jquery.com/jQuery.ajax/

    【讨论】:

      【解决方案3】:

      您可以使用 Chrome 的时间轴功能来跟踪一段时间内的内存使用情况。它是内置开发人员工具的一部分。我确信 Firebug 或其他 FF 插件会提供相同的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-17
        • 2013-06-23
        • 2021-05-29
        相关资源
        最近更新 更多