2011-12-20 60 views
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> 
+0

为什么你不能使用AJAX来重新从服务器的数据?这可能更适合这种方式,将数据转换为JSON并让jQuery通过ajax进行解析。 – MacMac 2011-12-20 14:59:24

+0

这个问题似乎与[另一个问题](http://stackoverflow.com/questions/1865958/iframe-based-ie6-javascript-memory-leak)有关,但不使用jquery不是一个选项。 – Towa 2011-12-20 15:00:36

+0

@lolwut:问题是我没有在index.htm中使用jquery,而且我担心在包含它时打破其他的东西。 – Towa 2011-12-20 15:03:26

回答