javascript - 使用大量内存的简单功能

标签 javascript jquery google-chrome-extension

我正在使用本地存储,因为点击后页面会重新加载,这样我就可以跟踪上次点击的项目。

如您所见,我试图清除 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/

相关文章:

javascript - 单击扩展程序图标时在新选项卡中打开扩展程序的 options.html 页面

javascript - onPress 在 Android 上不触发但在 iOS 上很好

javascript - 使用 jquery 更改表单输入字段的值

javascript - 我使用了 onchange 但代码在 blur 上被触发而且代码在 IE 中不起作用

javascript - 使用 JavaScript 滚动文本区域

android - 在服务器端 jsp 接受来自 android 的请求

jquery - 获取非子元素

javascript - 使用 setAttribute (javascript) 设置字体/字体系列

javascript - 如何使用 Chrome 扩展 API 拦截其他扩展的请求?

javascript - Extjs 在色域中隐藏 alpha 条和文本