在向缓存存储中添加大型响应时,出现“DOMException:未找到条目”。

10

我在使用Cache Storage存储视频时遇到了问题。如果视频大小较小,则正常工作,但如果视频大小约为100MB,则会出现以下错误:

DOMException: 找不到条目。

我使用以下代码:

fetch(videoUrl).then(function(res) {
  var responseToCache = res.clone();
  caches.open('videos').then(function(cache) {
    var request = new Request('https://example.com/video.mp4');
    cache.put(request, responseToCache).catch(function(err) {
      console.log(err); //this is where the error is thrown
    });
  });
});

我可以存储多个小文件,总大小 >= 100MB。

我觉得这是Chrome浏览器的限制,但我在互联网上找不到任何参考资料。

有没有办法避免这个限制?

编辑:

我能存储的最大视频大小为64MB。如果大小超过了这个限制,就会出错。

编辑2:

只有Chrome浏览器会出现错误。Firefox没有此限制。我在Firefox中尝试了大小>=350MB的视频,一切正常。


我忘记在哪里看到的,但是我读到了一个关于Chrome中Cache API实现中Windows特定错误的问题,并且他们愿意在下一个版本中修复它。 - Akram Saouri
一个项目最大可以存储多少数据?5M?20M?99? - Rudie
@Rudie 最大尺寸为64MB。如果视频太大,将会出现错误。 - Oleg
好问题。回答比较困难。这种新技术在用于生产应用程序之前需要进行测试和调试。Firefox一切正常,一如既往。Chrome有严重的漏洞问题,照常。 - Marcos Pérez Gude
2个回答

3
“最大尺寸”不是一个固定的数字,而是基于您的计算机和可用磁盘空间。这个具体数字有点棘手计算,所以更容易的方法是在谷歌浏览器地址栏中输入chrome://net-internals/#httpCache,点击“缓存”,然后找到“统计信息”下的Max size:。如果这个数字太小,您可以更改max size

请按照以下步骤操作:
  1. 右键单击开始菜单或桌面上的Google Chrome快捷方式,并选择“属性”
  2. 在“Google Chrome属性”窗口顶部单击“快捷方式”选项卡。
  3. 单击“目标”字段,并按“End”键将光标移动到文本末尾。
  4. 按一次空格键。
  5. 在该字段中键入“–disk-cache-size=1073741824”(相当于1GB),修改“size=”后面的数字,使其表示您想要为Google Chrome磁盘缓存分配的空间字节数。
  6. 单击“确定”。关闭所有正在运行的Google Chrome实例,并重新打开浏览器以开始使用新的缓存大小。
如有其他问题,请参考此页面以获得很好的答案:https://superuser.com/questions/769626/why-doesnt-chrome-respect-the-diskcachesize-policy

嗯,看起来Service Worker缓存与常规缓存的工作方式不同,并且不共享chrome://net-internals/#httpCache的设置,因为我无法在链接“浏览缓存条目”后面的页面上找到我的成功缓存条目。 - Oleg
我已经给你的回答颁发了悬赏,因为你提供了最接近的解决方案,谢谢。但是这个问题仍然没有解决,因为我正在尝试找到用户在使用HTML5缓存时绕过此限制的方法,或者如果这是Chrome的错误,那么请提供一个描述的链接。 - Oleg

2
你还需要定期清除缓存条目。每个浏览器都有一个硬限制,即给定源可以使用的缓存存储量。浏览器尽最大努力管理磁盘空间,但它可能会删除某个源的缓存存储。浏览器通常会删除某个源的所有数据或不删除该源的任何数据。请确保按名称版本化缓存,并仅从它们可以安全操作的脚本版本中使用缓存。

在此处阅读更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Cache

由于该技术的规范尚未稳定,我不建议您在应用程序中使用它。


这很可能不是我的情况,因为文档中说:“浏览器通常会删除一个源的所有数据或不删除一个源的所有数据”。在我的情况下,我只是无法保存某个视频,而其他视频仍然在缓存中。 - Oleg

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