首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到localStorage的大小

如何找到localStorage的大小
EN

Stack Overflow用户
提问于 2010-12-09 03:43:45
回答 13查看 95.8K关注 0票数 145

我目前正在开发一个网站,它将使用html5的localStorage。我已经阅读了所有关于不同浏览器的大小限制。但是,我还没有看到任何关于如何找出localStorage实例当前大小的内容。This question似乎表明JavaScript没有内置的方式来显示给定变量的大小。localStorage有没有我没见过的内存大小属性?有没有什么简单的方法可以解决我错过的这个问题?

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

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2013-03-31 00:31:40

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

代码语言: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");

为了便于阅读,将相同的代码放在多行中

代码语言: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");

或将此文本添加到书签的'location‘字段中,以方便使用

代码语言:javascript
运行
复制
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")); 

P.S.代码段根据注释中的请求进行更新。现在计算包括密钥本身的长度。每个长度都乘以2,因为javascript中的char存储为UTF-16 (占用2个字节)

另外,在Chrome和Firefox中都可以使用。

票数 284
EN

Stack Overflow用户

发布于 2013-07-27 01:54:10

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

代码语言:javascript
运行
复制
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"

票数 51
EN

Stack Overflow用户

发布于 2018-09-10 16:50:08

您可以使用Blob function.获取本地存储数据的当前大小这在旧浏览器中可能不起作用,请在caniuse检查对new BlobObject.values()的支持。

示例:

代码语言:javascript
运行
复制
return new Blob(Object.values(localStorage)).size;

Object.values()将localStorage对象转换为数组。Blob将数组转换为原始数据。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4391575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档