localstorage密钥本身占用多少空间?

Mat*_*ias 9 javascript html5 local-storage

让我们说我创建一个localstorage键并给它一个空字符串.keyitem的名称是否占用与每个字符的值相同的空间量?

例如

localStorage.setItem("keyitem","") 
//Equal the space of this other one under?
localStorage.setItem("key","item");
Run Code Online (Sandbox Code Playgroud)

此外,密钥的数量是否重要?例如

localStorage.setItem("key","");
//Equal the amount of storage as the 3 under combined? 
localStorage.setItem("k","");
localStorage.setItem("o","");
localStorage.setItem("h","");
Run Code Online (Sandbox Code Playgroud)

Rev*_*ght 1

localStorage我曾经找到一个函数来计算和对象的大小sessionStorage,但我不记得在哪里找到它。

这是代码:

Storage.prototype.size = function(units) {
    'use strict';
    units = units ? units.toUpperCase() : 'MB';
    var size = unescape(encodeURIComponent(JSON.stringify(this))).length;
    switch (units) {
        case 'B': return [size,'B'].join(' ');
        case 'KB': return [+(size / 1024).toFixed(3),'KB'].join(' ');
        default: return [+(size / 1024 / 1024).toFixed(3),'MB'].join(' ');
    }
};
Run Code Online (Sandbox Code Playgroud)

我决定继续在各种浏览器中运行一些测试。

火狐(37.0.2):

火狐控制台输出

铬 (42.0.2311.90 m):

Chrome 控制台输出

IE 11 (11.0.9600.17420):

IE 控制台输出

歌剧(29.0.1795.47):

Opera 控制台输出

所以看起来 FireFox、Chrome 和 Opera(可能还有 Safari,但我没有)都有相同的行为,并且键占用的空间比它们的值多得多。

在 IE(好旧的 IE...)中,实现的执行方式与您如何存储内容无关。

  • 我将引用后面一个答案的评论:“这并不显示实际密钥占用了多少空间。这只是显示了 localStorage 的 JSON 表示形式所具有的字符数。每个浏览器都实现了自己的保存数据的方式。每个这些方法中的一种可能会以与另一种完全不同的方式存储数据。例如,一种可能使用 utf8 编码,而另一种可能使用 utf16(意味着使用 2 个字节表示 1 个字符),有些可能使用压缩等。 – Patrick Evans” 。这也适用于您的方法——您只需测量 JSON 字符串。(CTD) (2认同)