Chrome 显示高速缓存存储使用率很高

Chrome shows high cache storage use

我一直在分析复杂应用程序的缓存存储使用,当我意识到存储的具有一定内容长度N的图像或脚本实际上占用了5N-10N space缓存存储。

考虑这个示例:我通过服务工作者从 OpenStreetMap 请求图像并将其存储在缓存中。缓存中只有一张图片。 Chrome 版本是最新版本(版本 65.0.3325.146(正式版)(64 位))。

这是缓存存储刷新后的视图:

这是清除缓存选项卡的视图:

所以,问题是大小为 6.4KB 的图像实际上占用了 13.8MB 的缓存存储空间。我错过了什么吗?

可以在 https://googlechrome.github.io/samples/service-worker/basic/ 看到现场示例 - 不到 10KB 的脚本占用了几乎 50KB 的缓存存储空间。

所以,问题是:当文件通过 service worker 缓存时,它们占用的 space 怎么会显着增加?我同意实际请求比实际响应更重要,但不是 10 倍

可能有用的链接:

  1. Chrome dev tools showing high cache storage utilisation
  2. Service Worker issues
  3. https://bugs.chromium.org/p/chromium/issues/detail?id=795134

对于 OSM 切片,高缓存使用率来自不透明请求。

当您缓存来自另一个域的内容时,您只能缓存它而不能以任何方式查看内容。这使得请求不透明。你不能fiddle你的代码中的内容,只能缓存它,它是一个黑盒子。为避免信息泄漏,浏览器在缓存资源时实施填充。出于这个原因,一张 100kb 的图像被报告占用 7mb 的缓存,实际报告的大小因浏览器而异。

这只意味着在抛出配额超出异常之前,您将能够在 SW 逻辑中缓存更少的不透明请求。所有缓存的请求——即使实际上很小——在缓存中占用大量(填充)space以避免信息泄漏。

在第二种情况下,我认为这是一个错误。