如何找到localStorage的大小

新手上路,请多包涵

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

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

原文由 derivation 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 660
2 个回答

在 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"));

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

PPS 应该在 Chrome 和 Firefox 中都可以工作。

原文由 Sergiy Seletskyy 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据@Shourav 上面所说的,我写了一个小函数,它应该准确地获取你所有的 localStorage 键(对于当前域)并计算组合大小,以便你确切知道占用了多少内存通过你的 localStorage 对象:

 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"

原文由 tennisgent 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题