我有一些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中泄漏)。再次感謝
IE 6有一個非常具體的泄漏問題在哪裏,如果你沒有空出所有的事件處理程序(的onclick,onmousever,onload事件)上您創建的HTML元素ng和動態銷燬,那些引用永遠不會被垃圾收集。這在更高版本中得到了修復。所以如果你在IE6中遇到這種情況,那很可能是你的問題(儘管Google的代碼應該超出這個問題)。請記住,瀏覽器會在感覺像它時運行它的垃圾收集器,並且幾乎從不會在你期望的時候運行它。如果您等待,內存使用量會下降嗎? – Andrew 2010-06-07 13:16:08
我實際上使用IE 7,並且在等待時內存不會下降......當我簡單地將它附加到
時,如何「清空所有事件處理程序」? – hhj 2010-06-07 13:23:16如果你使用IE 7,這個問題不應該影響你。之前的問題是,如果你有任何與他們有關的事件的元素(如果地圖具有拖放功能,那麼它就是這樣) - 你必須遍歷所有具有事件處理程序的元素,並說' document.getElementById('mydiv')。onclick = null;'等等,但你完全正確。在上面你的代碼的情況下,你正在做的事情沒有錯,我可以看到。 Google代碼必須是一個問題 - 我可能會給出最差的答案。 – Andrew 2010-06-07 15:16:22