使用浏览器本地存储的限制

13 浏览
0 Comments

使用浏览器本地存储的限制

由于localStorage(目前)仅支持字符串作为值,并且为了实现这一点,对象在存储之前需要被字符串化(存储为JSON字符串),那么关于值的长度是否有明确定义的限制呢?

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

0
0 Comments

浏览器本地存储(localStorage)的局限性主要表现在存储容量上。实际上,Opera浏览器并没有5MB的存储限制,它会根据应用程序的需求提供增加存储限制的选项,用户甚至可以为一个域名选择“无限存储”。可以通过测试localStorage限制/配额来验证。但是在Chrome浏览器上,存储容量的限制似乎是固定的,5MB相当于250万个字符。这可能意味着Chrome使用的是UTF-16编码来存储数据。然而,一些用户报告称在Chrome 15.0.874.54 beta版本上会出现崩溃问题,当存储的字符数量达到150万时就会发生崩溃。此外,一些用户还报告称在设备上运行Chrome浏览器时发生了崩溃,并导致背景重置。这些问题可能与设备的内存限制有关,特别是在同时运行其他应用程序时。另外,JavaScript中使用的是UCS-2编码,虽然与UTF-16编码类似,但在一些重要的细节上有所不同,主要是因为UCS-2编码比UTF-16编码更早。最后,有人建议在测试结果中显示字符数量以及与磁盘空间的等效大小(例如,2,700K个字符≈5,274 KB),这是否是一个好主意还需要进一步讨论。浏览器本地存储的局限性在存储容量方面存在一些问题,不同浏览器的表现也有所不同。

0
0 Comments

浏览器localStorage的局限性主要体现在存储容量上。根据维基百科关于Web Storage的文章,localStorage提供了比cookie更大的存储容量,谷歌Chrome、Mozilla Firefox和Opera每个源可以有10MB的存储容量,而Internet Explorer每个存储区域可以有10MB的存储容量。

然而,根据John Resig的文章,DOM Storage的存储空间并没有在规范中定义,也没有得到用户代理的明确广播。从Mozilla源代码可以看出,一个域名的默认存储大小是5120KB,比典型的2KB的cookie要大得多。但是,这个存储区域的大小可以被用户自定义,因此并不能保证得到5MB的存储区域,用户代理也可能提供不同大小的存储区域。

关于“per origin”的问题,它意味着每个域名(源)在任何一个客户端上可以存储5MB。数据存储在客户端的机器上,localStorage机制在不同客户端之间没有交互。

如果一个网站foo.com有200个用户,对于这200个用户访问该页面,存储空间是5MB吗?不,它意味着每个域名(源)在任何一个客户端上可以存储5MB。数据存储在客户端的机器上,localStorage机制在不同客户端之间没有交互。

如果一个域名指的是网址,那么foo.com和foo.com/boo.html将指向同一个域名,localStorage的使用将是这两个页面的域名foo.com的组合使用,是吗?不,我只是想确保相同的数据在同一个域名的多个页面上都可以访问。通常情况下,我发现域名和页面这两个词是可以互换使用的,所以只是想确保一下!

是的,foo.com和foo.com/bar.html将使用相同的localStorage,但foo.com和bar.com或foo.com和bar.foo.com将有不同的localStorage。当然,正如我所说的,这是每个用户的,因为它存储在客户端的计算机上。所以,用户A可以有XMB,用户B可以有XMB,其中X是每个浏览器允许的MB的数量。这回答了你的问题吗?

然而,单个值有限制吗?(如果我有很多标记要存储,在单个属性中以JSON格式存储安全吗?)我在Safari上的限制是5MB,Chrome 39上的限制是10MB(不确定何时从5MB增加)。参见这篇文章html5rocks.com/en/tutorials/offline/quota-research。

不,它不是按照域名,而是按照源(origin)进行限制,源是在Same Origin Policy等方面使用的术语:scheme+host+port。http://example.com和https://example.com不属于同一个源(不同的scheme)。http://example.com和http://www.example.com不属于同一个源(不同的host)。http://example.com和http://example.com:8080不属于同一个源(不同的port)。

Chrome已将限制提高到每个源10MB。我在arty.name/localstorage.html上进行了测试,得到了一个大小为10M的https_arty.name_0.localstorage。

我以为cookie的大小是4.1MB?

只是想向大家强调,这意味着如果两个用户在同一台机器上使用相同的浏览器,他们将共享这个存储空间。

0