IndexedDB中的最大项目大小

88

我正在开发一个简单的网络工具,利用了HTML5的IndexedDB(类似于键值数据库)功能。

我在寻找答案,但是无法确定:每个数据项可以存储的最大大小是多少?

3个回答

71
我认为单个项目的大小没有特定的限制,只有一个全局限制。
自这个答案最初编写以来,有关全局限制的规则已经更改。根据可用磁盘空间,“组”限制(针对给定域,包括其所有子域)可以从10 MB到2 GB不等。最新文档在MDN上

这是一个关于编程的旧回答,在Firefox 38(2015-05)发布后被淘汰,其中移除dom.indexedDB.warningQuota

mbrubeck在support.mozilla.com上的回答(我已经用永久版本替换了他提供的链接):

在Firefox 4中,默认情况下,网站可以使用最多50MB的IndexedDB存储。如果它尝试使用超过50MB,则Firefox将请求用户权限:http://mxr.mozilla.org/mozilla-central/source/modules/libpref/src/init/all.js#101 在移动设备上的Firefox(Google Android和Nokia Maemo),如果网站尝试使用超过5MB,Firefox会请求权限:http://mxr.mozilla.org/mozilla-central/source/mobile/app/mobile.js#571 [...]
如果用户授权网站超出50 MB的IndexedDB配额,那么据我所知Firefox不会再强制实施任何限制。IndexedDB数据库大小的唯一限制将是用户的磁盘空间和操作系统。 localStorage配额为5000KB,网站无法请求浏览器允许在localStorage中存储超过该数量的内容。

36

对于使用现代浏览器的普通网站,您不需要担心 indexedDB 中可用的存储空间,因为它要高得多。

最大存储大小取决于两个因素:浏览器磁盘空间

所以,Chrome 和大多数基于 Chromium 的浏览器允许使用 80% 的磁盘空间,其中每个来源可以使用 75%。这意味着, 如果您有 100GB 的磁盘空间,则可以使用 80GB 来存储 indexedDB 中的数据,其中单个来源可以使用 60GB。

此外,Firefox 允许每个来源存储 2GB 的数据,Safari 则允许每个来源存储 1GB。

您可以通过以下方式检查可用空间和已使用空间-

const quota = await navigator.storage.estimate();
const totalSpace = quota.quota;
const usedSpace = quota.usage;

1
在有如此多的条目时,查找速度是否有任何估计?是否会有任何潜在的延迟等待? - Vass
我认为Chromium每个源也是最多2GB:https://chromium.googlesource.com/chromium/src/+/refs/heads/master/storage/browser/quota/quota_settings.cc#68 - Maciej Krawczyk

35

在Nickolay的回答基础上,以下是Chrome和IE中IndexedDB容量的描述:

  • 桌面版Chrome:对于Web应用程序,默认情况下,Chrome在使用IndexedDB API存储数据时不会提示用户。它使用了共享池的概念,这里是完整的描述 - Chrome HTML5离线存储

  • Android版Chrome:没有找到任何官方链接来说明配额。但是根据我的经验,我保存了300 MB的数据而没有出现任何提示。很可能与桌面版Chrome的行为相同。

  • Internet Explorer 10:默认情况下,用户存储时会提示限制为10 MB。每个域名的硬限制默认为250 MB,但用户可以配置自己的限制,最高可达1 GB。

IOS Safari怎么样?这可能是最具限制性的浏览器之一。 - Christopher Grigg
IndexedDB 存储和 LocalStorage 存储有什么不同吗? - tomexsans
@tomexsans,请查看此处的讨论 https://softwareengineering.stackexchange.com/questions/219953/how-is-localstorage-different-from-indexeddb - Hoxtygen

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