【发布时间】:2011-02-28 16:15:31
【问题描述】:
我有一些 javascript(与 google maps api 一起使用),我正在 IE 和 Chrome 上进行测试,发现仅在 IE 中出现内存泄漏症状:当我不断刷新页面时,IE 中使用的内存量不断增长(快速),但在 Chrome 中它保持不变。如果不发布所有代码(因为它相当长),我可以获得一些关于要注意什么的建议吗?什么会导致 IE 页面刷新时内存一直这样增长?
就像我说的,我知道没有代码很难,但我想先看看是否有任何通用建议有效。谢谢。
更新:感谢到目前为止的回复。作为健全性检查,我运行了 google maps 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:那么有没有办法让这个 google Hello World 地图 api 代码在不泄漏 IE 内存的情况下运行?我注意到如果我在maps.google.com 上运行相同的实验,似乎没有泄漏......如果有人可以帮助我修改 hello world 代码以使其不会在 IE 中泄漏,那就太好了;这样我就可以构建它(如果这会有所帮助,我不介意使用 JQuery,但我在 Hello World 代码上尝试了它,它仍然在 IE 中泄漏)。再次感谢
【问题讨论】:
-
IE 6 有一个非常具体的泄漏问题,如果您没有将您正在动态创建和销毁的 HTML 元素上的所有事件处理程序(onclick、onmousever、onload)清空,那么这些引用将永远不会得到垃圾收集。这在以后的版本中得到了修复。因此,如果您在 IE6 中遇到此问题,则可能是您的问题(尽管 Google 的代码应该在此问题之上)。请记住,浏览器会在需要时运行其垃圾收集器,而几乎不会在您期望的时候运行。如果您等待,内存使用量会下降吗?
-
我实际上使用的是 IE 7,等待时内存不会下降......当我只是将它附加到 时,我将如何“取消所有事件处理程序”?跨度>
-
如果您使用的是 IE 7,这个问题应该不会影响您。之前的问题是,如果您有任何与它们相关联的事件的元素(如果地图具有拖放功能,那么它就有)——您必须遍历所有具有事件处理程序的元素并说 @ 987654324@ 等。但你是完全正确的。在您上面的代码的情况下,我可以看到您所做的并没有错。这一定是谷歌代码的问题——我能给出的最糟糕的答案。
标签: javascript internet-explorer memory-leaks