2011-12-20 66 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

回答