2010-06-07 79 views
6

我有一些JavaScript(用於谷歌地圖API),我在IE和Chrome上測試,並且只注意到IE中的內存泄漏症狀:當我連續刷新頁面時,IE中使用的內存量保持不變(快速),但在Chrome中保持不變。如果沒有發佈所有代碼(因爲它相當長),我可以得到一些關於要注意什麼的建議嗎?什麼可能導致內存在頁面刷新時在IE中繼續增長?javascript內存泄漏

就像我說的,我知道它的硬件沒有代碼,但我想看看是否有任何通用的建議首先工作。謝謝。

更新:感謝迄今的迴應。作爲一個完整性檢查,我運行谷歌地圖api「Hello World」代碼from google以查看IE中會發生什麼(代碼如下所示)。在IE中運行這些代碼時,當我一直重複刷新頁面時,內存不斷增長並不斷增長。這是內存泄漏嗎?這似乎並不像預期的功能...

<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
    function initialize() { 
    var latlng = new google.maps.LatLng(-34.397, 150.644); 
    var myOptions = { 
     zoom: 8, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    } 

</script> 
</head> 
<body onload="initialize()"> 
    <div id="map_canvas" style="width:100%; height:100%"></div> 
</body> 
</html> 

更新2:那麼,有沒有辦法讓這個谷歌的Hello World地圖API代碼,而無需在IE內存泄露運行?我注意到,如果我在maps.google.com上運行同樣的實驗,似乎沒有泄漏......如果有人能夠幫助我修改hello世界代碼,以便它不會在IE中泄漏,那將是非常好的;這種方式我可以建立它(我不介意使用JQuery,如果這會有所幫助,但我在Hello World代碼上嘗試過,它仍然在IE中泄漏)。再次感謝

+1

IE 6有一個非常具體的泄漏問題在哪裏,如果你沒有空出所有的事件處理程序(的onclick,onmousever,onload事件)上您創建的HTML元素ng和動態銷燬,那些引用永遠不會被垃圾收集。這在更高版本中得到了修復。所以如果你在IE6中遇到這種情況,那很可能是你的問題(儘管Google的代碼應該超出這個問題)。請記住,瀏覽器會在感覺像它時運行它的垃圾收集器,並且幾乎從不會在你期望的時候運行它。如果您等待,內存使用量會下降嗎? – Andrew 2010-06-07 13:16:08

+0

我實際上使用IE 7,並且在等待時內存不會下降......當我簡單地將它附加到時,如何「清空所有事件處理程序」? – hhj 2010-06-07 13:23:16

+1

如果你使用IE 7,這個問題不應該影響你。之前的問題是,如果你有任何與他們有關的事件的元素(如果地圖具有拖放功能,那麼它就是這樣) - 你必須遍歷所有具有事件處理程序的元素,並說' document.getElementById('mydiv')。onclick = null;'等等,但你完全正確。在上面你的代碼的情況下,你正在做的事情沒有錯,我可以看到。 Google代碼必須是一個問題 - 我可能會給出最差的答案。 – Andrew 2010-06-07 15:16:22

回答

7

更新:

我測試上面drip.exe的代碼,它似乎真的有像內存泄漏。內存使用率穩步上升,同時運行自動刷新幾分鐘的代碼。

更新2:

我認爲這是錯誤:http://code.google.com/p/gmaps-api-issues/issues/detail?id=1555&can=1&q=unload&colspec=ID%20Type%20Status%20Introduced%20Fixed%20Summary%20Internal%20Stars

+0

什麼使你相信鏈接的gmaps api問題是問題所在?它似乎與IE內存泄漏沒有太大關係。我們在IE7遇到同樣的問題,它似乎是一個顯示器,該瀏覽器... – matao 2011-08-30 00:14:01

+0

@matao與滴水測試非常\t有意義 – powtac 2011-08-30 09:41:07

+0

@matao,正如我在我的更新部分所說,滴灌顯示的內存消費在刷新的同時上升,由於除了g地圖之外沒有其他代碼,泄漏必須位於那裏。我肯定在這期間,這個問題已經被g解決了,或者應該使用Andrew根據文檔提出的建議:'onunload =「GUnload()」' – powtac 2011-08-30 11:01:46

1

一個衆所周知的IE內存泄漏的來源是Javascript的「東西」在封閉的(故意或意外)捕獲(函數)作爲事件處理程序綁定到DOM元素。出於這個原因,大多數框架都努力清除事件處理程序。

1

您還需要在離開頁面之前執行GUnload。只需添加一個「卸載」事件:

<body onload="initialize()" onunload="GUnload()"> 

瞭解更多關於此泄漏在Google Maps API

+2

我使用api v3。 (還是)感謝你的建議。 – hhj 2010-06-07 19:46:56