我正在尝试使用Javascript解决IE中的内存泄漏问题。 Basicaaly我正在使用javascript在图像上添加图标然后我需要 通过删除它们并重新添加它们来定期刷新图标。 当我通过滴水运行应用程序(IE6内存使用指示工具), 当我在重绘之前删除图像时,内存永远不会被回收 任何人都有任何关于如何强迫它回收那些记忆的想法?
下面的代码 - periodicalExecuter是Prototype的计时机制:
<pre>
<head>
<script src="Prototype/prototype-1.6.0.3.js" type="text/javascript"></script>
<style>
#container {
position:absolute;
left:20px;
top: 20px;
height:700px;
width:700px;
background-color: pink;
}
</style>
<script>
function addIcons() {
var ctr = document.getElementById("container");
var x = 0;
var y = 0;
var x1 = 0;
var y1 = 0;
var cnt = 0;
var imgStr = "";
var img;
var div1;
new PeriodicalExecuter(function(pex) {
y1 = cnt % 13;
if (y1 == 0) {
x1++;
}
x = (x1 + 1) * 21;
y = (y1 + 1) * 21;
div1 = document.createElement('div');
div1.id = 'img_' + (x1 - 1).toString() + y1.toString();
div1.style.position = "absolute";
div1.style.left = x;
div1.style.top = y;
img = document.createElement ('img');
img.src = 'traffic_icons/traffic-05.gif';
div1.appendChild(img);
ctr.appendChild(div1);
cnt++;
if (cnt == 169) {
pex.stop();
deleteIcons();
}
}, 0.1);
}
function deleteIcons() {
var ctr = document.getElementById("container");
var node = "";
var id = "";
for (var k = 0; k < 13; k++) {
for (var i = 0; i < 13; i++) {
id = 'img_' + k.toString() + i.toString();
node = document.getElementById(id);
ctr.removeChild(node);
}
}
addIcons();
}
</script>
</head>
<body>
<div id="container"></div>
<button onclick="addIcons();" style="position:absolute;left:780px;top:20px">Load Images</button>
<button onclick="deleteIcons();" style="position:absolute;left:780px;top:100px">Delete Images</button>
</body>
</html>
</pre>
答案 0 :(得分:1)
您可以尝试通过动态修改图片网址来刷新图片,如下所示:
var imageRefreshCounter = 0; function refreshIcons() { var ctr = document.getElementById("container"); var node = ""; var id = ""; for (var k = 0; k < 13; k++) { for (var i = 0; i < 13; i++) { id = 'img_' + k.toString() + i.toString(); node = document.getElementById(id); node.src = node.src + "?" + imageRefreshCounter++; } } addIcons(); }
答案 1 :(得分:0)
你应该升级到1.6.1,它修复了Prototype.js本身的一些漏洞。