【问题标题】:"DOMException: Entry was not found" when putting large responses to Cache Storage将大响应放入缓存存储时出现“DOMException:找不到条目”
【发布时间】:2016-08-25 12:47:12
【问题描述】:

Cache Storage 中存储视频时遇到问题。如果视频尺寸较小,它可以正常工作,但如果它的尺寸约为 100MB,我会收到此错误:

DOMException: Entry was not found.

我使用以下代码:

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
    });
  });
});

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

我想这是 Chrome 浏览器的限制,但我在 Internet 上找不到任何参考。

有什么办法可以避免这种限制吗?

编辑:

我可以存储的最大视频大小为 64MB。如果大小超过此值,则会发生错误。

编辑 2:

该错误仅发生在 Chrome 中。 Firefox 没有这样的限制。我在 Firefox 中尝试了大小 >= 350MB 的视频,并且没问题。

【问题讨论】:

  • 我忘记了在哪里,但我读到这是 Chrome 中缓存 API 实现中特定于 Windows 的错误,他们愿意在下一个版本中修复它。
  • 您可以为 1 件商品存储的最大尺寸是多少? 5M? 20M? 99?
  • @Rudie 最大大小为 64MB。如果视频较大,则会发生错误
  • 好问题。很难回答。这种新技术在用于生产应用之前需要进行测试和调试。 Firefox 没关系,一如既往。像往常一样,Chrome 存在严重的错误。

标签: javascript html offline offline-caching service-worker


【解决方案1】:

“最大大小”不是一个设定的数字,它基于您的计算机和可用磁盘空间量,该特定数字很难计算,因此将chrome://net-internals/#httpCache 放在您的谷歌中更容易chrome地址栏,点击“缓存”,然后在statistics下找到Max size:,如果这个数字太小可以更改max size

按照以下步骤操作:

  1. 右键单击“开始”菜单或桌面上的 Google Chrome 快捷方式 并选择“属性”
  2. 单击“Google Chrome”顶部的“快捷方式”选项卡 属性”窗口。
  3. 单击“目标”字段,然后按“结束”键移动光标 到正文结束。
  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 的设置,因为我在链接后面的页面上找不到我成功缓存的条目“探索缓存条目”。
  • 我奖励了您的回答,因为您提供了最接近的解决方案,谢谢)但是这个问题仍然悬而未决,因为我试图找到用户在使用 html5 时绕过此限制的方法缓存,或者,如果这是一个 chrome 错误,一个描述链接
【解决方案2】:

您还负责定期清除缓存条目。每个 浏览器对给定的缓存存储量有硬性限制 产地可以使用。浏览器尽最大努力管理磁盘空间,但它 可能会删除源的缓存存储。浏览器会 通常删除一个来源的所有数据或不删除一个来源的所有数据 一个起源。确保按名称对缓存进行版本化并仅使用缓存 来自他们可以安全操作的脚本版本。

阅读更多here

因为这项技术的规范还没有稳定下来,所以我不建议你在你的应用程序中使用它。

【讨论】:

  • 这很可能不是我的情况,因为正如文档"The browser will generally delete all of the data for an origin or none of the data for an origin" 中所说的那样。就我而言,我只是无法保存某个视频,而其他视频仍在缓存中。
猜你喜欢
  • 2018-11-08
  • 2020-01-11
  • 1970-01-01
  • 2015-07-07
  • 2017-03-22
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 2019-04-30
相关资源
最近更新 更多