javascript - 使用工作箱运行时缓存,请求不会显示在 chrome 的缓存存储中

标签 javascript caching service-worker progressive-web-apps workbox

我正在使用工作箱运行时缓存来缓存外部调用(materialize.css 就是其中之一)。在我的网络选项卡中,它显示请求来自 serviceWorker(看起来不错):

enter image description here

但是在缓存存储上,我的运行时缓存看起来是空的:

enter image description here

您可以在 chrome 的应用程序选项卡上看到我的服务人员,这是网站:https://quack.surge.sh/

服务 worker 代码:

const workboxSW = new self.WorkboxSW();
workboxSW.precache(fileManifest);
workboxSW.router.registerNavigationRoute("/index.html");workboxSW.router.registerRoute(/^https:\/\/res.cloudinary.com\/dc3dnmmpx\/image\/upload\/.*/, workboxSW.strategies.cacheFirst({}), 'GET');
workboxSW.router.registerRoute('https://cdnjs.cloudflare.com/ajax/libs/materialize/0.100.2/css/materialize.min.css', workboxSW.strategies.cacheFirst({}), 'GET');
workboxSW.router.registerRoute('https://res.cloudinary.com/dc3dnmmpx/image/upload/(.*)', workboxSW.strategies.cacheFirst({}), 'GET');

这是预期的行为吗?我对服务人员还很陌生,我不确定什么是正确的结果。

最佳答案

潜在的问题是那些是 opaque responses , 默认情况下,它们不会与 cacheFirst 一起使用策略。

https://workboxjs.org/how_tos/cdn-caching.html 有一些背景资料

Workbox 中有日志记录来帮助调试这类事情,但由于它很嘈杂,因此在生产构建中默认情况下未启用。要么切换你的 importScripts()使用开发版本(例如 importScripts('https://unpkg.com/workbox-sw@2.0.3/build/importScripts/workbox-sw.dev.v2.0.3.js') ,或进入 DevTools 并显式设置 workbox.LOG_LEVEL = 'debug' 会给您如下日志消息:

DevTools log

您有几个选项可以让事情如您所愿:

  • 改为workboxSW.strategies.staleWhileRevalidate() ,默认支持不透明响应。
  • 告诉 cacheFirst您可以使用不透明响应的策略:workboxSW.strategies.cacheFirst({cacheableResponse: {statuses: [0, 200]}})
  • 因为您的第三方 CDN 似乎都支持 CORS,您可以通过 crossorigin 为您的 CSS 和图像请求选择加入 CORS 模式。属性,响应将不再是不透明的:<img src='https://cors.example.com/path/to/image.jpg' crossorigin='anonymous'><link rel='stylesheet' href='https://cors.example.com/path/to/styles.css' crossorigin='anonymous'>

关于javascript - 使用工作箱运行时缓存,请求不会显示在 chrome 的缓存存储中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46416470/

相关文章:

javascript - 使用history.js 面临后退按钮单击事件的问题

python - Django - 服务器效率的缓存与 QuerySet 过滤器?

manifest - 添加到主屏幕在 Beforeinstallprompt 事件触发后不提示

javascript - Ajax GET 请求数据未返回并给出 CORS 错误

Javascript - 如何循环打印排序数字中的 html 元素 ID?

.net - 强制 IE 获取页面

ASP.NET 存储库模式/服务层缓存

javascript - 在没有 Service Worker 的情况下使用 Cache API 缓存网页

google-chrome - DOM 异常 : Failed to register a ServiceWorker: The script does not have a MIME type

javascript - 当方向改变时,Phonegap App 在 Galaxy Note 上崩溃