如何查找本地存储的大小

2022-08-30 02:32:13

我目前正在开发一个利用HTML5的localStorage的网站。我已经阅读了所有关于不同浏览器的大小限制。但是,我还没有看到有关如何找出本地存储实例的当前大小的任何内容。这个问题似乎表明JavaScript没有内置的方式来显示给定变量的大小。localStorage 是否具有我没有看到的内存大小属性?有没有一种简单的方法来做到这一点,我错过了?

我的网站旨在允许用户在“离线”模式下输入信息,因此能够在存储空间几乎满时向他们发出警告非常重要。


答案 1

在 JavaScript 控制台中执行此代码段(单行版本):

var _lsTotal=0,_xLen,_x;for(_x in localStorage){ if(!localStorage.hasOwnProperty(_x)){continue;} _xLen= ((localStorage[_x].length + _x.length)* 2);_lsTotal+=_xLen; console.log(_x.substr(0,50)+" = "+ (_xLen/1024).toFixed(2)+" KB")};console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");


多行相同的代码,用于阅读

var _lsTotal = 0,
    _xLen, _x;
for (_x in localStorage) {
    if (!localStorage.hasOwnProperty(_x)) {
        continue;
    }
    _xLen = ((localStorage[_x].length + _x.length) * 2);
    _lsTotal += _xLen;
    console.log(_x.substr(0, 50) + " = " + (_xLen / 1024).toFixed(2) + " KB")
};
console.log("Total = " + (_lsTotal / 1024).toFixed(2) + " KB");

或在书签的“位置”字段中添加此文本以方便使用

javascript: var x, xLen, log=[],total=0;for (x in localStorage){if(!localStorage.hasOwnProperty(x)){continue;} xLen =  ((localStorage[x].length * 2 + x.length * 2)/1024); log.push(x.substr(0,30) + " = " +  xLen.toFixed(2) + " KB"); total+= xLen}; if (total > 1024){log.unshift("Total = " + (total/1024).toFixed(2)+ " MB");}else{log.unshift("Total = " + total.toFixed(2)+ " KB");}; alert(log.join("\n")); 

附言:根据评论中的请求更新片段。现在,计算包括密钥本身的长度。每个长度乘以2,因为javascript中的char存储为UTF-16(占用2个字节)

P.P.S. 应该同时适用于 Chrome 和 Firefox。


答案 2

从上面@Shourav所说的内容开始,我编写了一个小函数,该函数应该准确地获取所有键(对于当前域)并计算组合大小,以便您确切地知道对象占用了多少内存:localStoragelocalStorage

var localStorageSpace = function(){
        var allStrings = '';
        for(var key in window.localStorage){
            if(window.localStorage.hasOwnProperty(key)){
                allStrings += window.localStorage[key];
            }
        }
        return allStrings ? 3 + ((allStrings.length*16)/(8*1024)) + ' KB' : 'Empty (0 KB)';
    };

我的返回:"30.896484375 KB"