功能简单,占用大量内存

伯纳多·利马

我之所以使用本地存储,是因为单击后页面会重新加载,因此我可以跟踪单击的最后一项。

如您所见,我尝试清除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,而无需使用此类依赖项,总体代码将会越来越更快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章