当通过 service worker 缓存文件时,缓存变得非常臃肿,service worker 是否在缓存隐藏文件?

When caching files via service worker the cache gets very bloated, is service worker caching hidden files?

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

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 是否在缓存隐藏文件?

  1. 你应该说得更具体一点——"some serious bloat" 在这里描述的不太清楚 =)
  2. 在磁盘上检查时总缓存大小不能反映实际文件通常意味着您正在缓存不透明响应。当一个不透明的响应被缓存时,缓存 API 通过说它需要很多 space 来隐藏响应的实际大小。所以例如。 7 Kb 文件在 SW 缓存中可能变为 7 Mb。在这里阅读更多:https://cloudfour.com/thinks/when-7-kb-equals-7-mb/
  3. 我不确定 "data in there that is not listed in my two caches" 是什么意思。您需要提供您的代码示例和来自 DevTools 的屏幕截图,并且更具体 =)
  4. 不,Service Worker 默认不缓存任何内容。我不确定你所说的 "hidden files" 是什么意思,但仍然没有,Service Worker 没有缓存你没有要求它缓存的任何东西。如果你要求它缓存这些 "hidden files" 那么它会缓存它们。但是没有自动机制可以在您不知情的情况下这样做。

希望对您有所帮助!欢迎提出更多问题或更新您的问题!