由于localStorage (当前)仅支持将字符串作为值,并且为了做到这一点,需要先将对象进行字符串化(存储为JSON-string),然后才可以定义值的长度限制。

有谁知道是否存在适用于所有浏览器的定义?


#1楼

我正在执行以下操作:

getLocalStorageSizeLimit = function () {var maxLength = Math.pow(2,24);var preLength = 0;var hugeString = "0";var testString;var keyName = "testingLengthKey";//2^24 = 16777216 should be enough to all browserstestString = (new Array(Math.pow(2, 24))).join("X");while (maxLength !== preLength) {try  {localStorage.setItem(keyName, testString);preLength = testString.length;maxLength = Math.ceil(preLength + ((hugeString.length - preLength) / 2));testString = hugeString.substr(0, maxLength);} catch (e) {hugeString = testString;maxLength = Math.floor(testString.length - (testString.length - preLength) / 2);testString = hugeString.substr(0, maxLength);}}localStorage.removeItem(keyName);maxLength = JSON.stringify(this.storageObject).length + maxLength + keyName.length - 2;return maxLength;
};

#2楼

这是找出限制的简单脚本:

if (localStorage && !localStorage.getItem('size')) {var i = 0;try {// Test up to 10 MBfor (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);            }
}

这是要点 , JSFiddle和博客文章 。

该脚本将测试设置越来越大的文本字符串,直到浏览器抛出异常为止。 到那时,它将清除测试数据,并在localStorage中设置一个大小密钥,以千字节为单位存储大小。


#3楼

您不想将大对象分成单个localStorage条目。 那将是非常低效的-每次有一些细微的细节更改时,都必须对整个事物进行解析和重新编码。 同样,JSON无法处理对象结构内的多个交叉引用,并且抹去了很多细节,例如构造函数,数组的非数值属性,稀疏条目中的内容等。

相反,您可以使用Rhaboo 。 它使用大量的localStorage条目存储大型对象,因此您可以快速进行小的更改。 恢复的对象是已保存对象的更精确的副本,并且API非常简单。 例如:

var store = Rhaboo.persistent('Some name');
store.write('count', store.count ? store.count+1 : 1);
store.write('somethingfancy', {one: ['man', 'went'],2: 'mow',went: [  2, { mow: ['a', 'meadow' ] }, {}  ]
});
store.somethingfancy.went[1].mow.write(1, 'lawn');

顺便说一句,我写的。


#4楼

引用有关Web存储的Wikipedia文章 :

可以简单地将网络存储视为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的存储空间,但是只有时间能说明问题)。 )


#5楼

实际上,Opera没有5MB的限制。 随着应用程序需求的增加,它提供了增加限制的功能。 用户甚至可以为域选择“无限存储”。

您可以轻松地自己测试localStorage限制/配额 。


#6楼

查找可以存储在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 () {//Variablesvar low = 0,high = 2e9,half;//Two billion may be a little low as a starting point, so increase if necessarywhile (canStore(high)) high *= 2;//Keep refining until low and high are equalwhile (low !== high) {half = Math.floor((high - low) / 2 + low);//Check if we can't scale down any furtherif (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 halfif (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.';//Functionsfunction 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的最大数据量,则可以使用此答案中的代码 。

编辑:堆栈代码段不支持localStorage ,因此这是指向JSFiddle的链接 。

结果

Chrome(45.0.2454.101): 5242878个字符
Firefox(40.0.1): 5242883个字符
Internet Explorer(11.0.9600.18036)16386 122066 122070个字符

在Internet Explorer中,每次运行都会得到不同的结果。


#7楼

我真的很喜欢cdmckay的答案 ,但是实时检查大小看起来并不好:太慢了(对我来说是2秒)。 这是改进的版本,它更快,更精确,并且可以选择误差的大小(默认值250,000 ,误差越小-计算时间越长):

function getLocalStorageMaxSize(error) {if (localStorage) {var max = 10 * 1024 * 1024,i = 64,string1024 = '',string = '',// generate a random keytestKey = 'size-test-' + Math.random().toString(),minimalFound = 0,error = error || 25e4;// fill a string with 1024 symbols / bytes    while (i--) string1024 += 1e16;i = max / 1024;// fill a string with 'max' amount of symbols / bytes    while (i--) string += string1024;i = max;// binary search implementationwhile (i > 1) {try {localStorage.setItem(testKey, string.substr(0, i));localStorage.removeItem(testKey);if (minimalFound < i - error) {minimalFound = i;i = i * 1.5;}else break;} catch (e) {localStorage.removeItem(testKey);i = minimalFound + (i - minimalFound) / 2;}}return minimalFound;}
}

去测试:

console.log(getLocalStorageMaxSize()); // takes .3s
console.log(getLocalStorageMaxSize(.1)); // takes 2s, but way more exact

对于标准错误,这可以更快地工作。 必要时也可以更加精确。


#8楼

移动浏览器:

Browser    | Chrome    | Android Browser    | Firefox     | iOS Safari
Version    | 40        | 4.3                | 34          | 6-8
Available  | 10MB      | 2MB                | 10MB        | 5MB

桌面浏览器:

Browser    | Chrome   | Opera    | Firefox    | Safari      | IE
Version    | 40       | 27       | 34         | 6-8         | 9-11
Available  | 10MB     | 10MB     | 10MB       | 5MB         | 10MB

参考链接


#9楼

您可以在现代浏览器中使用以下代码来实时高效地检查存储配额(总计和已用):

if ('storage' in navigator && 'estimate' in navigator.storage) {navigator.storage.estimate().then(estimate => {console.log("Usage (in Bytes): ", estimate.usage,",  Total Quota (in Bytes): ", estimate.quota);});
}

#10楼

我已经将二进制测试压缩到我使用的此函数中:

function getStorageTotalSize(upperLimit/*in bytes*/) {var store = localStorage, testkey = "$_test"; // (NOTE: Test key is part of the storage!!! It should also be an even number of characters)var test = function (_size) { try { store.removeItem(testkey); store.setItem(testkey, new Array(_size + 1).join('0')); } catch (_ex) { return false; } return true; }var backup = {};for (var i = 0, n = store.length; i < n; ++i) backup[store.key(i)] = store.getItem(store.key(i));store.clear(); // (you could iterate over the items and backup first then restore later)var low = 0, high = 1, _upperLimit = (upperLimit || 1024 * 1024 * 1024) / 2, upperTest = true;while ((upperTest = test(high)) && high < _upperLimit) { low = high; high *= 2; }if (!upperTest) {var half = ~~((high - low + 1) / 2); // (~~ is a faster Math.floor())high -= half;while (half > 0) high += (half = ~~(half / 2)) * (test(high) ? 1 : -1);high = testkey.length + high;}if (high > _upperLimit) high = _upperLimit;store.removeItem(testkey);for (var p in backup) store.setItem(p, backup[p]);return high * 2; // (*2 because of Unicode storage)
}

它还在测试之前备份内容,然后将其还原。

工作原理:将大小增加一倍,直到达到限制或测试失败。 然后,它存储高低点之间的距离的一半,并且每次减去/相加一半的一半(减去失败并增加成功); 磨成适当的价值。

upperLimit默认为1GB,它仅限制在开始二进制搜索之前向上扫描的指数范围。 我怀疑这甚至需要更改,但是我一直在思考。 ;)

在Chrome上:

> getStorageTotalSize();
> 10485762
> 10485762/2
> 5242881
> localStorage.setItem("a", new Array(5242880).join("0")) // works
> localStorage.setItem("a", new Array(5242881).join("0")) // fails ('a' takes one spot [2 bytes])

IE11,Edge和FireFox也报告相同的最大大小(10485762字节)。


#11楼

因此,一旦我开发了Chrome (桌面浏览器)扩展程序并测试了本地存储的实际最大大小。

我的结果:

Ubuntu 18.04.1 LTS (64-bit)
Chrome 71.0.3578.98 (Official Build) (64-bit)
Local Storage content size 10240 KB (10 MB)

超过10240 KB使用率返回了以下错误:

未捕获的DOMException:无法在“存储”上执行“ setItem”:设置“便笺”的值超出了配额。


#12楼

不要假设5MB可用-本地存储容量会因浏览器而异,其中2.5MB,5MB和无限制是最常见的值。 来源: http : //dev-test.nemikor.com/web-storage/support-test/

localStorage值的最大大小是多少?相关推荐

  1. 箱式图 分组_小白学R(三):重复测量数据的箱式图上的p值如何改大小呢?

    上一期分享了重复数据箱式图的使用条件和数据格式小白学R(二):重复测量数据/连续数据的箱式图(ggplot包)(1),今天就奉上箱式图的代码和以及如何改箱式图上的p值大小. 画箱式图 1.1 先看数据 ...

  2. 用c语言读取固定大小的raw格式图像并统计灰度值

    目的: 1.读取[256*256]大小的raw格式图像 2.统计灰度值 3.将结果写回result.txt 代码: 方法一 #include<stdio.h> #include<st ...

  3. 移动设备应用程序中支持多个屏幕大小和 DPI 值

    支持多个屏幕大小和 DPI 值的指导原则 要部署独立于平台的应用程序,应了解不同的输出设备.设备可以具有不同的屏幕大小或分辨率以及不同的 DPI 值或密度. Flex 工程师 Jason SJ 在他的 ...

  4. 浏览器本地存储(cookie、sessionStorage和localStorage)

    1.Cookie 特点:存储大小4KB左右:可设置失效时间:通信时会携带在HTTP头中,使用cookie保存过多数据会影响性能. 注意:cookie的跨域可以理解为跨域名,只要二级域名相同,不涉及到端 ...

  5. localStorage、sessionStorage详解,以及storage事件使用

    有关localStorage和sessionStorage的特性. localStorage本身带有方法有 添加键值对:localStorage.setItem(key,value),如果key存在时 ...

  6. Localstorage、sessionStorage、cookie 的区别

    一.Localstorage.sessionStorage.cookie 的区别是什么? 共同点:都是保存在浏览器端的,且同源的. 区别: 1.cookie数据始终携带在同源的http请求中,即coo ...

  7. r语言手动算两个C指数p值,如何用R语言进行Pvalue显著性标记?

    作者:一只想飞的喵 审稿:童蒙 编辑:angelica 箱线图是统计学中较常见的图形之一.这篇文章将讲述如何简单比较两组或多组的平均值,且添加显著性标记. 通常情况根据显著性p值的数值大小,分为四类: ...

  8. 钉钉头像大小设置 阿里cdn尺寸截取参数设置

    默认api的接口返回的avatar字段,是原始图片大小字段,尺寸和空间都是原始大小,如果想节省流量或统一尺寸,可以用阿里cdn自带的尺寸截取功能, 比如钉钉头像 avatar字段 返回值为原始大小 h ...

  9. [你必须知道的.NET]第九回:品味类型---值类型与引用类型(中)-规则无边

    发布日期:2007.5.28 作者:Anytao ©2007 Anytao.com ,原创作品,转贴请注明作者和出处. 接上回[第八回:品味类型---值类型与引用类型(上)-内存有理]的探讨,继续我们 ...

最新文章

  1. 机器学习(18)-- SVM支持向量机(根据身高体重分类性别)
  2. Android studio中出现Couldn't resolve resource @dimen/...
  3. 三周写出高性能的Python代码,这些小技巧你值得一试。
  4. matlab学习——1.基本操作
  5. php论坛有哪些_建网站的软件哪个好?建网站的软件有哪些?
  6. java循坏_Java的坏功能是什么
  7. JavaScript异步编程之事件
  8. hyper-v 尝试更改 状态时 应用程序遇到错误 无法初始化
  9. 在firefox中backspace返回键不能回到之前的页面
  10. 如何关闭电脑弹窗(2种方法)
  11. Android Studio开发中的各种开源API
  12. 金洪林:红邦创衣止于至善_品牌-生活时尚_品牌_YOKA时尚网
  13. 使用 make工具在Linux系统(CentOS为例)上编译构建源码并安装的步骤(软件以diction项目为例)
  14. Java 买卖股票的最佳时机含手续费leetcode_714
  15. svc预测概率_Kaggle平台Titanic生存率预测项目(TOP3%)
  16. 清华管理评论 | 上奇数科:产业知识服务引擎开创者
  17. dotween 的学习1.DoTween.To()的了解
  18. sql server存数据时报错“解索引超出了数组界限的问题”
  19. Ajax实现点击导航栏只切换页面内容,导航栏不变
  20. 打开 html 无地址栏,网页没有地址栏怎么办 地址栏不见了解决方法【方法教程】...

热门文章

  1. C++之肥大的界面之感想
  2. Debug.startMethodTracing() 没有生成trace文件
  3. 什么是restful风格?
  4. JNI编译时错误 编码GBK的不可映射字符 解决方法
  5. Android性能优化之内存篇(三)
  6. Flutter开发之路由跳转与传参(七)
  7. (0001) iOS 开发之收集第三方资源篇
  8. postman+Newman初步使用
  9. Httprunner测试
  10. zstack快速安装文档