2010-06-07 114 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