让我说我创建一个localstorage键并给它一个空字符串。 keyitem的名称是否占用与每个字符的值相同的空间量?
例如
localStorage.setItem("keyitem","")
//Equal the space of this other one under?
localStorage.setItem("key","item");
此外,键的数量是否重要?例如
localStorage.setItem("key","");
//Equal the amount of storage as the 3 under combined?
localStorage.setItem("k","");
localStorage.setItem("o","");
localStorage.setItem("h","");
答案 0 :(得分:2)
我找到了一个函数来计算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(' ');
}
};
我决定继续在各种浏览器中运行一些测试。
Firefox(37.0.2):
Chrome(42.0.2311.90米):
IE 11(11.0.9600.17420):
Opera(29.0.1795.47):
所以它看起来像FireFox,Chrome和Opera(可能也是Safari,但我没有)都具有相同的行为,并且键占用的空间远远超过它们的值。
在IE(旧的IE ......)中,执行的执行方式与存储内容的方式无关。
答案 1 :(得分:1)
keyitem的名称是否占用了相同的空间 每个字符值?
不,没有必要。密钥占用的空间量可能大于值占用的空间量。但是密钥和值占用的空间应该大约为5MB(虽然这与浏览器不同,因为它依赖于浏览器)
您可以使用此代码进行测试:
localStorage.clear();
localStorage.setItem(new Array(5e6).join(' '),'');
localStorage.key(0).length;
Chrome上的输出以进行上述测试:
只要comes under 5MB
(which is mostly the upper limit for most browsers)你的密钥可以有任何长度
答案 2 :(得分:0)
我想说这是关于磁盘上存储的真实结构的实现细节。
实际上,每个来源都有一定的空间(通常为5MiB,用于检查实际存储空间,您可以使用MDN文档中链接的test tool)并且可以存储数据(两者都是按键)和值)只要你没有超过那个大小,如前一个答案所示。所以是keys are included in the storage quota。
正如我在测试工具中指出的那样,字符实际上是UTF-16,所以它们占用了2个字节的存储空间。
另请注意,存储存储字符串,这意味着如果您将大浮点数作为键或值放置,则不会将其存储为二进制格式,而是存储为字符串!
// These takes up the same space
localStorage.setItem("a", 123);
localStorage.setItem("a", "123");
事实上,如果您尝试执行以下类型的操作,则在两种情况下都会获得string
localStorage.setItem("123", "");
localStorage.setItem(123, "");
typeof localStorage.key(0); // returns "string"
typeof localStorage.key(1); // returns "string" as well
关于第二部分,就存储而言
localStorage.setItem("k","");
localStorage.setItem("o","");
localStorage.setItem("h","");
应该从配额中获取3个字符的存储空间,如果使用UTF-16则为3 * 2字节,如果使用UTF-8则为3字节。
有关本地存储解决方案的概述,请访问http://www.html5rocks.com/en/features/storage
答案 3 :(得分:0)
我在Chrome中进行了测试,并且能够证明该密钥占用的空间与长度完全相同。
使用abc
键,我可以设置长度为5242877的值。使用a
键,我可以设置长度为5242879的值。如您所见,从键中删除字符可以释放那些值为2的字符。