0

规范中的Caches没有太多可阅读的内容。

我想知道,如果我在缓存中存储大量数据,Web 应用程序会崩溃吗?还是应用程序的运行时内存限制与缓存存储分开?如果需要,缓存会卸载运行时内存并回退到文件系统吗?还是缓存会尝试将所有内容加载到内存中(从而崩溃)?它有什么作用?

我正在寻找有关缓存中是否有大量内容是否会导致我遇到的崩溃的洞察力。

编辑,在下面找到了答案。

4

1 回答 1

0

根据 chromium-dev Google Group 上的这个线程,当应用程序太满时,CacheStorage 可能会出现导致应用程序崩溃的错误。这与缓存大小限制无关(它尽最大努力不驱逐缓存内容)。

来自 chromium-dev 线程:

不幸的是,Cache API 的设计存在缺陷。cache.keys() 方法返回缓存中每个请求的列表。您可以轻松地使用它来耗尽内存并OOM浏览器。cache.matchAll() 方法在返回每个响应时存在类似的问题。

为避免滥用,我们目前将缓存查询结果限制为 10MB:

https://cs.chromium.org/chromium/src/content/browser/cache_storage/cache_storage_cache.cc?l=70&rcl=e09c68d80742c2c73854eb4abb54c4a0878200a9

我相信长期计划是让 Cache API 一旦可用于 webidl 就实现异步迭代:

https://github.com/heycam/webidl/issues/580

与此同时,恐怕您需要在 chrome 中构建查询以将它们限制为小于 10MB。跨缓存对象分片数据可能是一种可行的方法。

希望有帮助。

于 2019-03-01T01:47:45.017 回答