【发布时间】:2012-06-14 20:35:10
【问题描述】:
什么是软限制(用户需要允许超过该限制)? 什么是硬限制(允许的最大值)。
【问题讨论】:
-
由于这些答案中的大多数已经过时,我正在添加一个指向源的链接(检查版本标签):chromium.googlesource.com/chromium/src.git/+/refs/tags/…
标签: indexeddb
什么是软限制(用户需要允许超过该限制)? 什么是硬限制(允许的最大值)。
【问题讨论】:
标签: indexeddb
警告 - 此信息已过时 - 请参阅下面的 other answer。
Chrome 在达到 QUOTA_ERR 之前有 5mb 的软限制。 Here's a MDN reference 这个事实。
spec 提到了 QuotaExceededError,但似乎没有说明什么时候应该抛出它。
QuotaExceededError 操作失败,因为没有足够的 剩余存储空间,或已达到存储配额且用户 拒绝为数据库提供更多空间。
我没有听说过硬限制,在我自己的开发中也没有达到。在您到达之前,性能应该会向南走很远。
【讨论】:
2020 年 5 月更新:Chrome 现在允许源使用 60% 的存储设备空间(真正的细节:“存储设备”是包含 chrome 配置文件目录的分区)。在此处更新文章https://web.dev/storage-for-the-web/#how-much
经验法则是用户硬盘驱动器上可用空间的 6%(2015 年 7 月编辑:为 10%),如果您的源使用 websql、appcache 或文件系统 API,则更少。提到 5mb 的 MDN 文档已过时并已更新。有关当前政策的血腥细节在这里:https://developer.chrome.com/apps/offline_storage
注意一些烦人的细微之处:
【讨论】:
最小或软限制为 5MB - 浏览器将请求存储数据的权限。 最大存储空间是硬盘的限制,因为所有数据都本地存储在您的机器磁盘上。 基本上,如果您有 20GB 的可用存储空间,那么您可以将所有存储空间用于 IndexedDB。
【讨论】:
在 chrome>dev tools(F12)>console 中使用以下代码检查配额
// 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);
} );
【讨论】:
window.webkitStorageInfo 已弃用。请改用navigator.webkitTemporaryStorage 或navigator.webkitPersistentStorage。
IndexedDB 从 Google Chrome 中的“TEMPORARY”存储中获得内存。 Chrome 上的临时存储空间的默认配额为可用磁盘空间的 50%,其中 20% 可供您的离线应用使用。为临时存储请求更多配额没有任何作用。
根据上述情况,您的问题的答案是:
您可以使用Browser Storage Abuser 工具(在this HTML5Rocks 文章中引用,该文章记录了不同浏览器的结果)来确定您正在运行的 Chrome 上的可用临时存储。
我没有足够的声誉来发布更多链接,但上面关于配额研究的 HTML5Rocks 文章有足够的详细信息来帮助您确定适当的存储类型(临时或持久)和适当的存储机制(如果您不一定IndexedDB 归零),因为它可能适合您的应用程序。
【讨论】:
问题是关于 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 隐身模式
【讨论】: