我使用的是本地存储,因为点击后页面会重新加载,因此我可以跟踪最后点击的项目。
正如您所看到的,我已经尝试清除localStorage以缩小使用中的内存,但在不到10分钟的使用时它已经在1.000.000K。
每次我的页面重新加载时,此脚本是否在不同位置重新声明此变量?
发生了什么使它使用了这么大的记忆?
这是我的全部代码。
它是我为Chrome创建的扩展程序,它选择一个选项并单击按钮,按钮提交表单,页面重新加载,并且它会一次又一次地执行。
var last = localStorage.getItem('last');
var current = getNext(last);
var prox = getNext(current);
localStorage.clear();
$('select[name="myselect"] option').each(function(){
if($(this).val().indexOf(current)>-1){
$(this).prop('selected', true);
$('.abc').first().click();
localStorage.setItem('last',current);
}
});
function getNext(current){
var arrIds = ['227','228','229','230','231','232'];
return arrIds[arrIds.indexOf(current)+1] || '227';
}
更新代码,没有var声明,大幅减少了内存消耗,但随着时间的推移,内存增加(在十分钟内从160.000K增加到240.000K):
$('select[name="myselect"] option').each(function(){
if($(this).val().indexOf(getNext(localStorage.getItem('last')))>-1){
$(this).prop('selected', true);
$('.abc').first().click();
localStorage.setItem('last',getNext(localStorage.getItem('last')));
}
});
function getNext(current){
var arrIds = ['227','228','229','230','231','232'];
return arrIds[arrIds.indexOf(current)+1] || '227';
}
答案 0 :(得分:4)
根据问题下面的评论中的讨论,问题似乎来自jQuery本身。目前还不知道确切的原因,但似乎jQuery保留了在提交表单时未发布的数据。
这可能部分与Chrome扩展程序的某些方面有关,因为通常在刷新时,浏览器会释放包括全局变量在内的所有内存。
jQuery通过在名为jQuery.cache
的全局引用中保存数据和闭包,为内存泄漏创造了巨大的潜力。如果没有正确清理,则泄漏很多。
由于您正在创建Chrome扩展程序,因此您不必太多强迫您使用jQuery,因为您无需担心IE6和7等浏览器的浏览器不兼容性。直接使用DOM API这样的依赖关系,整体代码将更小,更多更快。