当本地存储(localStorage)已满时会发生什么?

94

我找到了关于缓存行为的文章,所以我只能假设它们之间的差异不大,但我想确认一下。

我了解到大多数浏览器的localStorage容量为5MB左右,我对浏览器的行为很感兴趣。

我知道每个浏览器的行为都不同,但我主要对Safari、Chrome和Firefox感兴趣(因为它们是我认为的浏览器)。

  • 这些浏览器会删除我的网站数据吗?还是会选择“最旧”的数据之类的处理方式?
  • 在这种情况下,我的项目会被保存吗?

最重要的问题:

  • 假设我在我的网站上“滥用”localStorage,试图将其全部使用完,并在同一页中填充它并尝试保存更多。我会得到警告吗?当此情况发生时,getItem会返回null,还是会以某种方式保存在内存中?

  • 如果我尝试保存一个大于localStorage大小的项目会发生什么?

答案: 可以在这里找到答案。

  • 是否可以期望sessionStorage的行为与localStorage相同,因为它们据说是一样的?

我知道这是很多问题,但我正在尝试理解与主题相关的所有内容,非常感谢你能回答任何一个问题。


当你尝试它时发生了什么? - kol
我还没有填写它,我正在尝试更多的研究,以确保我不会犯初步错误。我不太确定如何尝试它,我看到没有这样的问题或文章,我认为这可能是一个好的帖子给人们。一旦我达到那个点,如果这还没有得到答案,我将添加自己的结论。 - eric.itzhak
2
请看这个链接:https://dev59.com/5GjWa4cB1Zd3GeqPsqfT - Cristi Pufu
这确实回答了第四个问题,但我正在寻找更多信息。 - eric.itzhak
1个回答

124

首先,一些有用的资源:

回答你的问题,桌面浏览器通常具有每个域的最大localStorage配额为5MB。在某些情况下,用户可以进行调整:

  • Opera:opera:config -> Domain Quota For localStorage
  • Firefox:about:config -> dom.storage.default_quota

在Chrome中,似乎没有办法让用户调整此设置,尽管像Opera一样,可以使用开发者工具直接按域编辑localStorage数据。

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

如果是:

  • 数据将被存储,如果存在相同的键,则覆盖该值。

如果不是:

  • 数据将不会被存储,并且不会覆盖任何现有数据。
  • 将抛出QUOTA_EXCEEDED_ERR异常。

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

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

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


6
这个回答似乎很扎实,谢谢您的时间! - eric.itzhak
不客气。抱歉,我没有Safari或IE的信息(我在Linux上)。 - tagawa
如果我理解正确,这是否意味着所有浏览器都有特定于域的配额限制?还是说(假设)5MB内存由所有域共享? - Nis
3
每个起源(域)都有单独的存储空间,因此大小限制不会被所有域共享。规范指出:“建议每个起源的大小限制为五兆字节,这是一个大致的限制。” - tagawa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接