Chrome浏览器的存储限制

Cla*_*ols 33 indexeddb

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

dgr*_*gan 37

经验法则是用户硬盘驱动器上可用空间的6%(编辑2015年7月:10%),如果您的源是使用websql,appcache或文件系统API,则更少.提及5mb的MDN文档已经过时并且已经更新.有关当前政策的详细信息如下:https://developer.chrome.com/apps/offline_storage

注意一些恼人的微妙之处:

  1. indexeddb没有PERSISTENT存储,只有上面关于TEMPORARY的链接中的内容适用.
  2. 一旦你的来源耗尽了它在池中的份额,indexeddb事务将无益地中止而没有真正的指示原因.截至目前,确定缺少配额的唯一方法是使用queryUsageAndQuota来检查剩余的空间.希望在这些情况下,未来版本的chrome将很快正确地填写IDBTransaction.error.编辑:chrome 26现在可以使用QuotaExceededError正确填充IDBTransaction.error.
  3. 目前没有API为indexeddb请求更多存储空间.

  • 抱歉,我对此有点困惑。用户硬盘的10%,你的意思是如果用户有3TB的硬盘,你可以创建一个300GB的IndexedDB?之后它会抛出错误吗? (2认同)
  • 那就对了。诚实的问题:您考虑的其他解释是什么? (2认同)
  • 使用此工具自己进行测试:https://demo.agektmr.com/storage/ (2认同)

Ank*_*h55 13

使用chrome> dev工具(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); 
} );
Run Code Online (Sandbox Code Playgroud)

  • *警告:不推荐使用`window.webkitStorageInfo`.请改用`navigator.webkitTemporaryStorage`或`navigator.webkitPersistentStorage`.* (2认同)
  • 有关当前标准,请参见http://stackoverflow.com/a/29662958/2441511,截至2015年4月 (2认同)

bul*_*ley 8

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

Chrome 在达到QUOTA_ERR. 这是对该事实的 MDN 参考

规范提到了QuotaExceededError,但似乎并没有说什么时候应该扔任何东西。

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

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

  • 是什么让你这么想的?据我所知,这些都不是真的。(我编写了 Chrome IndexedDB 配额强制执行代码。)我只是在手机上玩弄 http://demo.agektmr.com/storage/ 以确保它仍然可以工作,并且那里没有我可以看到的 5mb 限制。 (11认同)
  • 这是部分正确的。大多数 Chrome 浏览器有 50mb 的限制,但移动版 Chrome 有 5mb 的限制。 (2认同)

tan*_*ius 7

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

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

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

  • 在 Chrome正常模式下

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

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

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

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

  • 在 Chrome隐身模式下

    • 对于离线 API(应用程序缓存、文件系统、IndexedDB、WebSQL):ca。100 MiB 固定,无论大容量存储(来源)上的可用空间如何。
    • 对于Web 存储 API(LocalStorage、SessionStorage...):5 MiB 固定(来源)。


小智 5

Google Chrome浏览器中的“ TEMPORARY”存储为IndexedDB提供了内存。Chrome上的临时存储的默认配额为可用磁盘空间的50%,您的离线应用程序可使用其中的20%。为临时存储请求更多配额不会执行任何操作。

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

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

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

我没有足够的声誉,因此无法发布更多链接,但是以上有关配额研究的HTML5Rocks文章提供了足够的详细信息,可以帮助您确定适当的存储类型(TEMPORARY或PERSISTENT)和适当的存储机制(如果您不一定要归零于IndexedDB)可能适合您的应用程序。