我有一些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