localStorage已满时会发生什么?


72

我找到了文章有关缓存行为的,因此我只能假设它并没有太大区别,但我想确保。

我已经了解到,大多数浏览器的localStorage容量为5MB(允许或占用),我对这些浏览器的行为感兴趣吗?

我了解每种浏览器的行为都不同,但我主要是在Safari,Chrome和Firefox中被吸引(因为我认为这些是浏览器)。

  • 上面提到的浏览器会从我的网站上删除数据还是会选择“最早的”或类似的东西?
  • 在这种情况下可以保存我的物品吗?

最重要的是:

  • 假设我“滥用”了localStorage和我的网站,试图全部使用它,并且在同一页面中,我正在填充它并尝试保存更多内容,我会收到警告并且在getItem发生这种情况时会返回null以某种方式保存在内存中?

  • 如果我尝试保存大于localStorage大小的项目会怎样?

    已回答: 可以在这里找到答案

  • 可以从sessionStorage期待相同的确切行为吗?据称应该相同?

我知道这是很多问题,但是我试图理解与该主题相关的所有内容,对于您可以回答的问题的任何部分,我将深表感谢。

问候。


尝试时发生了什么事?
kol 2012年

好吧,我还没有填写,但为了确保我不会犯最初的错误,我试图在此之前进行更多研究。我不太确定如何尝试,我发现没有这样的问题,也没有文章,我认为这对人们来说可能是个好帖子。一旦达到这一点,如果那时我还没有回答,我会添加自己的结论。
eric.itzhak 2012年


好吧,这确实回答了第四个问题,但我正在寻找更多信息。
eric.itzhak 2012年

Answers:


94

首先,一些有用的资源:

为回答您的问题,台式机浏览器的初始最大本地存储配额通常为每个域5MB。在某些情况下,用户可以对此进行调整:

  • Opera:Opera:config->用于LocalStorage的域配额
  • Firefox:about:config-> dom.storage.default_quota

在Chrome中,似乎没有用户可以调整此设置的方法,尽管与Opera一样,可以使用开发人员工具在每个域中直接编辑localStorage数据。

当您尝试将数据存储在localStorage中时,浏览器会检查当前域是否有足够的剩余空间。如是:

  • 存储数据,如果已经存在相同的密钥,则覆盖值。

如果不:

  • 不会存储数据,也不会覆盖现有数据。
  • 一个QUOTA_EXCEEDED_ERR异常被抛出。

在这种情况下,getItem(key)将返回成功存储的最后一个值(如果有)。

(Opera稍有不同,它显示一个对话框,使用户可以选择增加当前域的存储空间。)

请注意,sessionStorage和localStorage都是同一Storage对象的实现,因此它们的行为相似并且错误处理相同。


1
这似乎是一个可靠的答案,谢谢您的时间!
eric.itzhak

别客气。抱歉,我没有Safari或IE的信息(我在Linux上)。
tagawa

如果我理解正确,是否表示所有浏览器都有特定于域的配额限制?还是(假设)所有域共享5MB内存?
尼斯2014年

每个源(域)都有一个单独的存储空间,因此大小限制不是所有域都共享的。规范说:“建议每个来源的最大限制是5 MB。”
tagawa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.