【发布时间】:2011-01-10 20:15:47
【问题描述】:
我一直在寻找这个问题的答案,虽然找到了相关的问题,但我找不到完全匹配的问题。
我有一个相当大的应用程序,它应该使用 jQuery.load() 方法将页面加载到另一个页面的 div 中。我遇到的问题是,当一次又一次地将同一个页面加载到同一个 div 中时,我看到浏览器的内存大幅增加(内存泄漏)。如果我调用 $("*").unbind,我当然看不到泄漏,但是一切都已重置,所以这并不是真正的修复。下面的代码示例重现了这个问题:
Test1.htm
<head>
<title></title>
<script type="text/javascript" language="javascript" src="Scripts/jquery-1.3.2.js"></script>
<script type="text/javascript" language="javascript">
<!--
var i = 0;
$(document).ready(function() {
$("#btn").click(
function() {
i++;
$("#Test1").load("Test2.htm", null, function() {
//$(document).trigger("test");
})
$("#count").html(i);
});
});
//-->
</script>
</head>
<body>
<img id="btn" src="someimage.png" />
<h3>We are loading Test2.htm into below div</h3>
<div>
Count loads =<span id="count">0</span>
</div>
<div id="Test1" style="border-style:solid">EMPTY</div>
</body>
Test2.htm = 任何旧的 html 页面..
如果您加载 Test1.htm 并多次单击按钮,您会注意到浏览器内存稳步增加。我认为问题在于加载的 js 和 DOM 元素从未设置为垃圾收集。在我的现实世界系统中,我尝试删除 (elem.remove() 或 .empty()) 加载的元素,但这并不能真正解决问题。我还使用“src”加载了许多 js 文件,我将其替换为 $.getScript,这似乎有了一个小的改进。这些都是想到的解决方法,我想为这个问题找到一个真正的解决方案。有什么想法吗?
【问题讨论】:
-
Test2.htm中有js代码吗?您是否在任何其他函数中引用了以
load()加载的对象?如果您将使用普通的$.ajax()调用加载数据,内存泄漏会持续吗?
标签: javascript jquery internet-explorer memory-leaks