Chrome浏览器的存储限制

39

软限制是指在超过此限制之前,用户需要给予权限。硬限制是指允许的最大值。


6
谷歌Chrome浏览器的存储白皮书可能会有所帮助。 - dumbmatter
由于大多数答案已经过时,我添加了一个源链接(请检查版本标签):https://chromium.googlesource.com/chromium/src.git/+/refs/tags/76.0.3775.5/storage/browser/quota/quota_settings.cc - holmberd
6个回答

43
2020年5月更新:Chrome现在允许一个源使用存储设备空间的60%(真正的细节:“存储设备”是包含Chrome配置文件目录的分区)。更新文章请参见https://web.dev/storage-for-the-web/#how-much

经验法则为用户硬盘上可用空间的6%(2015年7月进行编辑:为10%),如果您的源正在使用websql、appcache或filesystem api,则可用空间更少。 MDN文档提到的5mb已经过时并已更新。 有关当前策略的详细信息,请参见此链接:https://developer.chrome.com/apps/offline_storage

请注意一些令人讨厌的微妙之处:

  1. indexeddb没有持久性存储,只适用于上面链接中关于临时存储的内容。
  2. 一旦您的源耗尽其池的份额,indexeddb交易将无助地中止,而没有实际指示原因。 目前唯一确定配额不足是使用queryUsageAndQuota检查剩余空间的方式。 希望Chrome的未来版本能很快在这些情况下正确填写IDBTransaction.error。编辑:Chrome 26现在会使用QuotaExceededError正确填充IDBTransaction.error。
  3. 目前没有API来请求indexeddb的更多存储空间。

2
抱歉,我有点困惑。您所说的用户硬盘的10%是指如果用户拥有3TB的硬盘,您可以创建一个300GB的IndexedDB吗?之后会抛出错误吗? - benshope
3
好的,没问题。诚实的问题:你还考虑过其他的解释吗? - dgrogan

15

在Chrome的开发者工具(F12)>控制台中使用以下代码检查配额

// Request storage usage and capacity left
window.webkitStorageInfo.queryUsageAndQuota(webkitStorageInfo.TEMPORARY, 
//the type can be either TEMPORARY or PERSISTENT
function(used, remaining) {
  console.log("Used quota: " + used + ", remaining quota: " + remaining);
}, function(e) {
  console.log('Error', e); 
} );

3
警告:window.webkitStorageInfo已被弃用,请改用navigator.webkitTemporaryStoragenavigator.webkitPersistentStorage - cregox
3
请参考2015年4月的当前标准,链接为https://dev59.com/dmPVa4cB1Zd3GeqP6ole#29662958。 - user2441511
请参见 https://developer.mozilla.org/en-US/docs/Web/API/StorageManager/estimate 获取更新的标准。 - Edwin

8

警告 - 这些信息已过时 - 请参见下面的其他答案

Chrome在达到QUOTA_ERR之前有一个5MB软限制。这是一个关于此事实的MDN参考链接

规范提到了QuotaExceededError,但似乎没有说明应该在何时引发它。

QuotaExceededError 操作失败,因为剩余存储空间不足或存储配额已达到,用户拒绝为数据库提供更多空间。

我自己的开发中没有听说过硬限制,也没有达到过。在达到限制之前,性能应该会急剧下降。


2
这部分是正确的。大多数Chrome浏览器有50MB的限制,但移动版Chrome只有5MB的限制。 - buley
12
你为什么这么认为?据我所知,这些事情都不是真的。(我写了Chrome IndexedDB配额执行代码。)我刚刚在手机上试玩了http://demo.agektmr.com/storage/以确保它仍在工作,但我并没有看到任何5MB限制。 - dgrogan
我错了。一些html5rocks文章谈到了FF移动实现,我混淆了Firefox和Chrome。感谢您的纠正。 - buley

7
这个问题涉及到Chrome和IndexedDB标签。我假设这是关于网站的问题,而不是Chrome扩展或应用程序(它们允许无限制地存储IndexedDB)。对于网站来说,IndexedDB是Chrome临时存储的API(source)。因此,这个问题是关于Chrome临时存储的配额。在Chrome 67中,配额行为发生了变化,这实际上并没有记录在文档中,除了a bug report。综合起来,当前的配额行为是:
  • 在 Chrome 的 普通模式

    • 对于离线 API(应用程序缓存,文件系统,IndexedDB,WebSQL):

      如果达到“应该保持可用”的值,则一个源(“站点”)的配额将为零。 “应该保持可用”值与保持主存储器上空闲空间相关。自Chrome 67以来,它是“2 GiB”和“主存储器总容量的10%”中较低的值(source)。一旦达到此限制,将无法将附加写入临时存储器,但不会删除临时存储器中的现有数据。

      如果尚未达到“应该保持可用”值,则配额将为共享池的20%(source)。这可能意味着“Chrome已经保存的所有临时存储器中的数据的20%,加上Chrome可以保存到本地存储器而不触发“应该保持可用”值的所有数据”。

    • 对于Web存储API(LocalStorage,SessionStorage等):固定为5 MiB(source);我不知道这是否受上述记录的“应该保持可用”限制的影响。

  • 在 Chrome 的 隐身模式

    • 对于离线 API(应用程序缓存,文件系统,IndexedDB,WebSQL):固定为约100 MiB,无论主存储器上的可用空间如何(source)。
    • 对于Web存储API(LocalStorage,SessionStorage等):固定为5 MiB(source)。

6
IndexedDB在Google Chrome中从“TEMPORARY”存储获得内存。Chrome上的临时存储默认配额为可用磁盘空间的50%,其中20%可供离线应用使用。对临时存储请求更多配额不起作用。
基于以上内容,对你的问题的回答如下:
1. IndexedDB(在Chrome浏览器中)可以在不请求存储的情况下使用存储。(知道它是从临时存储分配的)
2. 请求超过TEMPORARY存储限制(上述50%可用空间的20%)将不会分配任何东西。
你可以使用Browser Storage Abuser工具(引用this HTML5Rocks文章,该文章记录了不同浏览器的结果)来确定您正在运行的Chrome上可用的临时存储。

我没有足够的SO声望来发布更多链接,但上述关于配额研究的HTML5Rocks文章有足够的细节,可以帮助您确定适当的存储类型(TEMPORARY或PERSISTENT)和适当的存储机制(如果您尚未完全确定IndexedDB),以适合您的应用程序。


在当前版本的Chrome中,“可用磁盘空间默认配额为50%”不再适用。请参见我的答案了解新情况。 - tanius

-2

最小或软限制为5MB-浏览器将请求存储数据的权限。 最大存储量取决于您硬盘驱动器的限制,因为所有数据都存储在本地机器磁盘上。 基本上,如果您有20GB的可用存储空间,则可以将所有存储空间用于IndexedDB。


1
这条信息回答了问题并且回答正确。请先进行研究,然后再将我的信息标记为无用。 - stefan
7
这个问题是关于Chrome的,您的回答是关于Firefox的。 - dgrogan

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