当我使用jQuery 1.4.2时,我已经遇到了一些问题(http://stackoverflow.com/questions/8158739/ie-memory-leak-and-eval-with-jquery/8176724#8176724)
现在我已经将我的jQuery更新到版本1.7.1,并且每次迭代后内存都会缓慢增加。
这是我的代码:
var interval;
function setupdaterate(rate) {
//if the interval wasn't defined only
if (interval == undefined) {
interval = setInterval(updateitems, rate * 1000);
}
}
function updateitems() {
$('.updatable').each(function () {
var data = 'ViewObjectId=' + $(this).attr('objectid');
$.ajax({
async: true,
url: '/Ajax/GetUpdatedViewObjectDataHandler.ashx',
data: data,
type: 'POST',
timeout: 10000
}).done(function (data) {
//do the job
});
});
}
10秒后,所有具有“可更新”类的项目都会更新。但由于某种原因,这段代码泄露了一些内存。
这是使用jquery ajax的最佳方式吗?什么可能导致内存泄漏行为?
我怎么能找出问题出在哪里?有什么建议?
答案 0 :(得分:1)
无法说明为什么会发生这种情况,因为没有堆屏幕截图,也没有done
回调的代码,但摆脱了所发生的所有意外关闭
最小化内存使用量。以下假设它在全局范围内运行/否则为空函数:
var interval;
function setupdaterate(rate) {
//if the interval wasn't defined only
if (interval == undefined) {
interval = setInterval(updateitems, rate * 1000);
}
}
function updateDone( data ){
//do the job
}
function iterator() {
var data = 'ViewObjectId=' + $(this).attr('objectid');
$.ajax({
async: true,
url: '/Ajax/GetUpdatedViewObjectDataHandler.ashx',
data: data,
type: 'POST',
timeout: 10000
}).done( updateDone
);
}
function updateitems() {
$('.updatable').each( iterator );
}
答案 1 :(得分:0)
Esailija,
我尝试了你的代码,它正在运行并使用与我相同的内存。我今天注意到了一些事情,昨天我正在测试 IE8开发者工具打开,我几乎可以肯定这是因为内存泄漏。因为今天我正在测试关闭,内存使用非常稳定。
我也验证了我的代码并且我对它有一些了解,我认为这可能是问题所在,但不,问题是IE8开发人员工具窗口的故障以及它的糟糕内存管理。