javascript内存泄漏

时间:2010-06-07 12:08:43

标签: javascript internet-explorer memory-leaks

我有一些javascript(与谷歌地图api一起使用),我正在IE和Chrome上测试,并且只注意到IE中的内存泄漏症状:当我连续刷新页面时,IE中使用的内存量不断增长(快速) ),但在Chrome中它保持不变。如果没有发布所有代码(因为它很长),我可以得到一些关于要注意什么的建议吗?什么可能导致内存在页面刷新时在IE中继续增长?

就像我说的,我知道它没有代码很难,但我想看看是否有任何通用建议是先工作的。感谢。

更新:感谢目前为止的回复。作为一个完整性检查,我运行谷歌地图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 world代码以使其在IE中不泄漏,那将会很棒。这样我可以构建它(我不介意使用JQuery,如果这会有所帮助,但我在Hello World代码上尝试了它,它仍然在IE中泄漏)。再次感谢

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

一个众所周知的IE内存泄漏源是(有意或无意)将Javascript“stuff”捕获到作为DOM元素的事件处理程序绑定的闭包(函数)中。由于这个原因,大多数框架都会尽力清除事件处理程序。

答案 2 :(得分:1)

您还需要在离开页面之前执行GUnload。只需添加“卸载”事件:

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

Google Maps API

了解有关此漏洞的详情

答案 3 :(得分:0)

到目前为止,大多数答案都会帮助您实现目标,因此我在JavaScript中添加了一篇关于IBM Dev Works for Memory泄漏模式的文章的链接(您可能会发现它有用)

http://www.ibm.com/developerworks/web/library/wa-memleak/