5

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

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

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

谢谢,任何评论表示赞赏!

4

3 回答 3

3

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

Internet Explorer 和 Mozilla Firefox 是最常与 JavaScript 内存泄漏相关的两种 Web 浏览器。这两种浏览器的罪魁祸首是用于管理 DOM 对象的组件对象模型。本机 Windows COM 和 Mozilla 的 XPCOM 都使用引用计数垃圾收集来进行内存分配和检索。引用计数并不总是与用于 JavaScript 的标记和清除垃圾收集兼容。本文重点介绍解决 JavaScript 代码中内存泄漏的方法。请参阅参考资料以了解有关 Firefox 和 IE 中 COM 层内存处理的更多信息。

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

于 2012-07-03T01:49:32.970 回答
2

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

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

于 2012-07-03T01:49:33.073 回答
0

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

于 2012-07-03T01:24:44.507 回答