ワークボックスランタイムキャッシュを使用して外部呼び出しをキャッシュしています(materialize.cssはその1つです)。私のネットワークタブでは、リクエストがserviceWorkerから来ていることが示されています(問題ないようです)。
しかし、キャッシュストレージでは、ランタイムキャッシュは空に見えます。
私のサービスワーカーはchromesの[アプリケーション]タブで確認できます。これは次のWebサイトです: https://quack.surge.sh/
サービスワーカーコード:
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');
これは予想される動作ですか?私はサービスワーカーにかなり慣れていないので、正しい結果が何であるかわかりません。
根本的な問題は、それらが 不透明な応答 であり、デフォルトでは、cacheFirst
戦略では使用されないことです。
https://workboxjs.org/how_tos/cdn-caching.html にはいくつかの背景があります
この種のデバッグに役立つWorkboxへのログインがありますが、ノイズが多いため、本番ビルドではデフォルトで有効になっていません。 importScripts()
を切り替えて開発ビルドを使用する(例:importScripts('https://unpkg.com/[email protected]/build/importScripts/workbox-sw.dev.v2.0.3.js')
)か、DevToolsにアクセスして_workbox.LOG_LEVEL = 'debug'
_を明示的に設定すると、次のようなログメッセージが表示されます。
期待どおりに機能させるには、いくつかのオプションがあります。
workboxSW.strategies.staleWhileRevalidate()
に変更します。これは、デフォルトで不透明な応答をサポートします。cacheFirst
戦略に問題がないことを伝えます:workboxSW.strategies.cacheFirst({cacheableResponse: {statuses: [0, 200]}})
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'>
_