【问题标题】:When caching files via service worker the cache gets very bloated, is service worker caching hidden files?当通过服务工作者缓存文件时,缓存变得非常臃肿,服务工作者是否在缓存隐藏文件?
【发布时间】:2020-08-03 15:11:52
【问题描述】:

我有一个服务人员遵循 Nicolas Bevacqua 概述的这种方法 here。经过一些小的调整后,该代码对我有用。但是当浏览一段时间时,缓存会变得严重膨胀。我添加了一些排除项,即

if (( event.request.url.indexOf( '/maps/' ) !== -1 ) || 
    ( event.request.url.indexOf( '/mapfiles/' ) !== -1 ) || 
    ( event.request.url.indexOf( '/maps-api-v3/' ) !== -1 ) || 
    ( event.request.url.indexOf( '/images/' ) !== -1 ) || 
    ( event.request.url.indexOf( '.mp4' ) !== -1 ) ) {
    return false;
} 

但奇怪的是缓存总大小并不能反映实际缓存中的内容。那里似乎有我的两个缓存中没有列出的数据。有没有办法阻止这种情况发生? Service Worker 是否缓存隐藏文件?

【问题讨论】:

  • 将 crossorigin="anonymous" 添加到外部 CDN 请求或理想地将它们存储在本地似乎对我有用。感谢下面来自@pate 的链接

标签: javascript caching service-worker cachestorage


【解决方案1】:
  1. 您应该更具体一点 - “一些严重的臃肿”在这里不太具有描述性 =)
  2. 在磁盘上检查时,总缓存大小不反映实际文件通常意味着您正在缓存不透明的响应。当缓存不透明的响应时,缓存 API 会通过说它占用大量空间来隐藏响应的实际大小。所以例如。 7 Kb 文件在 SW 缓存中可能变为 7 Mb。在这里阅读更多:https://cloudfour.com/thinks/when-7-kb-equals-7-mb/
  3. 我不确定您所说的“我的两个缓存中未列出的数据”是什么意思。您需要提供来自 DevTools 的代码示例和屏幕截图,并且更具体 =)
  4. 不,Service Worker 默认不缓存任何内容。我不确定您所说的“隐藏文件”是什么意思,但仍然没有,Service Worker 不会缓存您没有要求它缓存的任何内容。如果您要求它缓存这些“隐藏文件”,那么它将缓存它们。但是,在您不知情的情况下,没有自动机制可以这样做。

希望这会有所帮助!随时提出更多问题或更新您的问题!

【讨论】:

  • 谢谢@pate 这绝对解释了这个问题。由于我限制了上述文件,因此我没有收到来自 iOS 的任何警报,因为该应用程序占用了太多存储空间。所以希望这不是问题?
猜你喜欢
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2016-10-15
  • 2020-01-08
相关资源
最近更新 更多