我正在使用本地存储,因为点击后页面会重新加载,这样我就可以跟踪上次点击的项目。
如您所见,我试图清除 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';
}
最佳答案
根据问题下方评论中的讨论,问题似乎来自 jQuery 本身。目前尚不清楚确切原因,但 jQuery 似乎保留了提交表单时未释放的数据。
这可能部分与它是 Chrome 扩展的某些方面有关,因为通常在刷新时,浏览器会释放所有内存,包括全局内存。
jQuery 通过将数据和闭包保存在名为 jQuery.cache
的全局引用中,从而产生了巨大的内存泄漏可能性。如果清理不当,泄漏会比比皆是。
由于您正在创建一个 Chrome 扩展程序,所以应该没有什么可以强制您使用 jQuery,因为您不必担心 IE6 和 7 等浏览器的浏览器不兼容问题。通过直接使用 DOM API 而无需这样的依赖关系,整体代码会更小,更快。
关于javascript - 使用大量内存的简单功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26075340/