我想不通为什么内存在增加,它的每个运行此代码停留的时间有:的setInterval JavaScript的内存泄漏
easingFunction = function (t, b, c, d) {
if ((t /= d/2) < 1) return c/2 * t * t * t * t * t + b;
return c/2 * ((t -= 2) * t * t * t * t + 2) + b;
}
processFrame = function() {
for (var i = 0; i < tiles.length; i++) {
var tile = tiles[i];
tile.percent += 4;
if (tile.percent > 0) {
var TH = Math.max(0, Math.min(TILE_HEIGHT, targetObj.height - tile.imageY));
var TW = Math.max(0, Math.min(TILE_WIDTH, targetObj.width - tile.imageX));
var SW, SH, SX, SY, amount;
draw.save();
draw.translate(tile.imageX, tile.imageY);
if (direction == "tb" || direction == "bt") {
amount = easingFunction(tile.percent, 0, TW, 100);
SW = Math.min(TW, amount);
SH = TH;
SX = 0;
SY = 0;
} else {
amount = easingFunction(tile.percent, 0, TH, 100);
SW = TW;
SH = Math.min(TH, amount);
SX = 0;
SY = 0;
}
draw.drawImage(copycanvas, tile.imageX, tile.imageY, SW, SH, SX, SY, SW, SH);
draw.restore();
}
}
var ok = true;
for (i = 0; i < tiles.length; i++) {
if (tiles[i].percent < 100) {
ok = false;
break;
}
}
if (ok) {
clearInterval(interval);
showComplete();
}
};
this.show = function (target, hideTarget) {
createTiles();
for (var i = 0; i < tiles.length; i++) {
var tile = tiles[i];
tile.percent = 0 - i * 10;
}
}
var intervalDelay = (config.duration * 1000)/(tiles.length * 3 + 25);
interval = setInterval(function() {
processFrame();
}, intervalDelay);
};
function Tile() {
this.imageX = 0;
this.imageY = 0;
this.percent = 0;
};
};
我离开了一些不重要的代码。 ideea是我从外部调用show()函数。 setInterval被初始化并运行了大约100次的processFrame()。
我试图从processFrame外界留下一些代码,我到:
processFrame = function() {
for (var i = 0; i < tiles.length; i++) {
var tile = tiles[i];
tile.percent += 4;
}
var ok = true;
for (i = 0; i < tiles.length; i++) {
if (tiles[i].percent < 100) {
ok = false;
break;
}
}
if (ok) {
clearInterval(interval);
showComplete();
}
};
但记忆仍能增加。
我看不出任何根本上错误的代码。记忆力增加有多大,你如何衡量以及你使用的是什么JavaScript引擎? 浏览器已知泄漏一些内存,并有很多方法来测量... – cellcortex 2011-06-16 08:43:21
我使用firefox进行测试,内存每次调用show()时会增加大约2-3 Mb的RAM。我正在使用任务管理器来测量firefox进程。 – gabitzish 2011-06-16 08:48:00