系统在运行javascript过夜后挂起

时间:2012-07-03 01:12:12

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

我的javascript非常简单。它只是不断调用ajax来下载数据并将其显示在我的屏幕上。我通过直接更新数据来重用这些DOM元素(使用jquery' s $(DIV).empty()函数,然后追加到另一个内容)。然而,在一夜之间运行后,我的电脑一直挂起,似乎还在做点什么。

我尝试通过一些firefox插件来观察内存消耗。运行两个小时后,内存可能增长200MB,但我不确定它是否仅由我的js或其他原因引起。

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

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

3 个答案:

答案 0 :(得分:3)

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

  

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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