39

什么是软限制(用户需要允许超过该限制)?什么是硬限制(允许的最大值)。

4

6 回答 6

42

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

注意一些烦人的细微之处:

  1. indexeddb 没有持久存储,只有上面链接中关于 TEMPORARY 的内容适用。
  2. 一旦你的源用尽了它在池中的份额,indexeddb 事务将毫无帮助地中止,而没有真正的原因。到目前为止,确定配额不足的唯一方法是使用queryUsageAndQuota检查剩余空间。希望将来的 chrome 版本能在这些情况下正确填写 IDBTransaction.error。编辑:chrome 26 现在用 QuotaExceededError 正确填写 IDBTransaction.error。
  3. 目前没有 API 可以为 indexeddb 请求更多存储空间。
于 2012-06-18T06:10:44.273 回答
15

在 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); 
} );
于 2013-08-21T06:45:26.597 回答
8

警告 - 此信息已过时- 请参阅下面的其他答案

Chrome 在达到QUOTA_ERR. 这是 MDN对这一事实的引用。

规范提到了 a但QuotaExceededError似乎没有说明什么时候应该抛出它。

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

我没有听说过硬限制,在我自己的开发中也没有达到。在您到达之前,性能应该会向南走很远。

于 2012-06-12T23:42:13.607 回答
7

问题是关于 Chrome 并标记为 IndexedDB。而且我认为它是关于网站的,而不是 Chrome 扩展程序或应用程序(允许无限存储 IndexedDB)。

对于网站,IndexedDB 是 Chrome 临时存储的 API(来源)。所以问题是关于Temporary Storage in Chrome 的配额

在 Chrome 67 中,配额行为发生了变化,除了错误报告之外,这并没有真正记录在案。综合来看,目前的配额行为是:

  • 在 Chrome正常模式下

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

      如果达到“应该保持可用”值,则一个来源(“站点”)的配额将为零。“应该保持可用”值与在大容量存储上保持空闲的空间有关。从 Chrome 67 开始,它是“2 GiB”和“大容量存储总容量的 10%”(来源)的较低值。一旦达到此限制,对临时存储的额外写入将失败,但不会删除临时存储中的现有数据。

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

    • 对于Web 存储 API(LocalStorage、SessionStorage、...):5 MiB 固定(来源);我不知道这是否受到上面记录的“应该保持可用”限制的影响。

  • 在 Chrome隐身模式下

于 2019-04-02T21:04:46.693 回答
6

IndexedDB 从 Google Chrome 中的“临时”存储中获得内存。Chrome 上的临时存储空间的默认配额为可用磁盘空间的 50%,其中 20% 可用于您的离线应用程序。为临时存储请求更多配额不会做任何事情。

基于上述,您的问题的答案将是:

  1. IndexedDB(在 Chrome 浏览器上)无需请求即可使用存储。(知道它是从临时存储中分配的)
  2. 请求超过 TEMPORARY 存储限制(50% 的 20%,如上所述)将不会分配任何内容。

您可以使用Browser Storage Abuser工具(在HTML5Rocks 文章中引用,该文章记录了不同浏览器的结果)来确定您正在运行的 Chrome 上的可用临时存储。

我没有足够的声望来发布更多链接,但上面关于配额研究的 HTML5Rocks 文章有足够的详细信息来帮助您确定适当的存储类型(临时或持久)和适当的存储机制(如果您不一定要归零) IndexedDB) 可能适合您的应用程序。

于 2015-10-01T16:39:52.967 回答
-2

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

于 2012-12-18T23:42:08.890 回答