由于localStorage
(当前)仅支持字符串作为值,并且为了做到这一点,对象需要在存储之前进行字符串化(存储为 JSON 字符串),因此是否存在关于值长度的定义限制。
有谁知道是否有适用于所有浏览器的定义?
由于localStorage
(当前)仅支持字符串作为值,并且为了做到这一点,对象需要在存储之前进行字符串化(存储为 JSON 字符串),因此是否存在关于值长度的定义限制。
有谁知道是否有适用于所有浏览器的定义?
Web 存储可以简单地视为对 cookie 的改进,提供更大的存储容量(Google Chrome 中每个来源 10 MB(https://plus.google.com/u/0/+FrancoisBeaufort/posts/S5Q9HqDB8bh),Mozilla Firefox和 Opera;Internet Explorer 中每个存储区域 10 MB)和更好的编程接口。
还引用了John Resig 的一篇文章[2007 年 1 月发布]:
储存空间
这意味着,使用 DOM 存储,您拥有比对 Cookie 强加的典型用户代理限制更多的存储空间。然而,提供的数量没有在规范中定义,也没有被用户代理有意义地广播。
如果您查看 Mozilla 源代码,我们可以看到 5120KB 是整个域的默认存储大小。与典型的 2KB cookie 相比,这为您提供了更多的工作空间。
但是,该存储区域的大小可以由用户(因此不能保证或暗示 5MB 存储区域)和用户代理(例如,Opera 可能只提供 3MB - 但只有时间会证明)。 )
实际上 Opera 没有 5MB 的限制。当应用程序需要更多时,它提供增加限制。用户甚至可以为域选择“无限存储”。
您可以自己轻松测试 localStorage 限制/配额。
这是一个用于找出限制的简单脚本:
if (localStorage && !localStorage.getItem('size')) {
var i = 0;
try {
// Test up to 10 MB
for (i = 250; i <= 10000; i += 250) {
localStorage.setItem('test', new Array((i * 1024) + 1).join('a'));
}
} catch (e) {
localStorage.removeItem('test');
localStorage.setItem('size', i - 250);
}
}
该脚本将测试设置越来越大的文本字符串,直到浏览器抛出异常。届时它将清除测试数据并在 localStorage 中设置一个大小键,以千字节为单位存储大小。
localStorage
此代码段将查找localStorage
每个域中可以存储的字符串的最大长度。
//Clear localStorage
for (var item in localStorage) delete localStorage[item];
window.result = window.result || document.getElementById('result');
result.textContent = 'Test running…';
//Start test
//Defer running so DOM can be updated with "test running" message
setTimeout(function () {
//Variables
var low = 0,
high = 2e9,
half;
//Two billion may be a little low as a starting point, so increase if necessary
while (canStore(high)) high *= 2;
//Keep refining until low and high are equal
while (low !== high) {
half = Math.floor((high - low) / 2 + low);
//Check if we can't scale down any further
if (low === half || high === half) {
console.info(low, high, half);
//Set low to the maximum possible amount that can be stored
low = canStore(high) ? high : low;
high = low;
break;
}
//Check if the maximum storage is no higher than half
if (storageMaxBetween(low, half)) {
high = half;
//The only other possibility is that it's higher than half but not higher than "high"
} else {
low = half + 1;
}
}
//Show the result we found!
result.innerHTML = 'The maximum length of a string that can be stored in localStorage is <strong>' + low + '</strong> characters.';
//Functions
function canStore(strLen) {
try {
delete localStorage.foo;
localStorage.foo = Array(strLen + 1).join('A');
return true;
} catch (ex) {
return false;
}
}
function storageMaxBetween(low, high) {
return canStore(low) && !canStore(high);
}
}, 0);
<h1>LocalStorage single value max length test</h1>
<div id='result'>Please enable JavaScript</div>
请注意,字符串的长度在 JavaScript 中是有限制的;如果您想查看在localStorage
不限于单个字符串的情况下可以存储的最大数据量,您可以使用此答案中的代码。
编辑: Stack Snippets 不支持localStorage
,所以这里有一个指向 JSFiddle 的链接。
Chrome (45.0.2454.101): 5242878 个字符
Firefox (40.0.1): 5242883 个字符
Internet Explorer (11.0.9600.18036):16386 122066 122070 个字符
每次在 Internet Explorer 中运行时,我都会得到不同的结果。
不要假设 5MB 可用 - localStorage 容量因浏览器而异,2.5MB、5MB 和无限制是最常见的值。来源:http : //dev-test.nemikor.com/web-storage/support-test/