0
我正在开发一个大量使用jQuery(UI)来提供良好用户体验的网站。对于某些(愚蠢的)原因,本网站的部分内容显示在iframe中,并且还有一个用于刷新iframe以从服务器获取最新数据的按钮。jQuery提高内存使用率
问题是,每次刷新iframe时,内存使用量增加都会导致在一段时间后出现严重内存问题(在IE8 & 9中测试过)。但是这只有在jquery库被加载时才会发生。在使用Drip/Sieve时可以看到这种行为。为了更好地理解问题,我删除了导致下面两个文件的所有不必要的代码。随着每次重新加载,内存使用量增加约800 kb。 (如果你想重现,试试http://jsbin.com/asamid/7)
我该如何防止jquery消耗掉我的内存?有没有办法在重新加载之前手动卸载所有jquery?
index.htm的:(见http://jsbin.com/asamid/7/edit#html,live)
<html>
<head>
<title>Memory Leak - Parent</title>
<script type="text/javascript">
function reload() {
var frame = document.getElementById("testFrame");
frame.src = "frame.htm";
}
</script>
</head>
<body>
<a href="javascript:reload()" id="link">reload frame</a>
<iframe id="testFrame" src="frame.htm" />
</body>
</html>
frame.htm:(见http://jsbin.com/ocuval/edit#html,live)
<html>
<head>
<title>Memory Leak - Frame</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
<h2>Test Frame</h2>
<div>lorem ipsum</div><div>lorem ipsum</div><div>lorem ipsum</div><div>lorem ipsum</div><div>lorem ipsum</div><div>lorem ipsum</div>
</body>
</html>
为什么你不能使用AJAX来重新从服务器的数据?这可能更适合这种方式,将数据转换为JSON并让jQuery通过ajax进行解析。 – MacMac 2011-12-20 14:59:24
这个问题似乎与[另一个问题](http://stackoverflow.com/questions/1865958/iframe-based-ie6-javascript-memory-leak)有关,但不使用jquery不是一个选项。 – Towa 2011-12-20 15:00:36
@lolwut:问题是我没有在index.htm中使用jquery,而且我担心在包含它时打破其他的东西。 – Towa 2011-12-20 15:03:26