その後、24時間ごとにダウンロードされます。 mayより頻繁にダウンロードされますが、24時間ごとにダウンロードする必要があります。これは、不正なスクリプトが長時間迷惑にならないようにするためです。
FirefoxとChromeにも同じことが当てはまりますか? OR Service Worker JavaScriptの更新は、ユーザーがサイトに移動したときにのみ発生しますか?
注: Firefox 57 以降、 Chrome 68 、およびサービスワーカーをサポートするSafariおよびEdgeのバージョン、 更新されたService Worker仕様 を考慮してデフォルトの動作が変更されました。これらのブラウザーでは、更新のためにService Workerスクリプトをチェックするときに、デフォルトでHTTPキャッシュディレクティブが無視されます。以下の説明は、ChromeおよびFirefoxの以前のバージョンにも適用されます。
Every サービスワーカーのスコープ内にある新しいページに移動するたびに、Chromeはnavigator.serviceWorker.register()
に渡されたJavaScriptリソースの標準HTTPリクエストを作成しますコール。 service-worker.js
という名前だとしましょう。このリクエストは、ナビゲーションまたはサービスワーカーがPush
イベントなどでウェイクアップされたときにのみ行われます。 not24時間ごとに各サービスワーカースクリプトを再フェッチするバックグラウンドプロセス、またはそのような自動化されたものがあります。
このHTTPリクエストは、標準 HTTPキャッシュディレクティブ に従いますが、1つの例外があります(次の段落で説明します)。たとえば、サーバーが、キャッシュされた応答を1時間使用することを示す適切なHTTP応答ヘッダーを設定した場合、次の1時間以内に、ブラウザーのservice-worker.js
の要求はブラウザーのキャッシュによって満たされます。我々はnotではない Cache Storage API について話していることに注意してください。これはこの状況には関係ありません。むしろ 標準ブラウザHTTPキャッシング 。
標準のHTTPキャッシュルールの1つの例外、および24時間の問題は、HTTPキャッシュ内のservice-worker.js
エントリの経過時間が24時間を超えると、ブラウザーが常にネットワークにアクセスすることです。したがって、機能的には、1日、1週間、または1年のmax-age
を使用しても違いはありません。すべてmax-age
が1日であるかのように扱われます。
ブラウザベンダーは、開発者が1年のservice-worker.js
で提供される「壊れた」またはバグのあるmax-age
を誤ってロールアウトしないようにしたいと考えています。 (サイトデータを消去したり、サイトをシフトリロードしたりすることをユーザーが知っていることに依存することはできません。)
一部の開発者は、service-worker.js
をすべてのHTTPキャッシングを無効にする応答ヘッダーで明示的に提供することを好みます。つまり、service-worker.js
のネットワーク要求が各ナビゲーションごとに行われます。別のアプローチとして、非常に短いmax-age
を使用して(たとえば1分)、1人のユーザーからの非常に多数の高速ナビゲーションがある場合にある程度の調整を行うことがあります。本当にリクエストを最小限にしたい場合で、すぐにservice-worker.js
を更新しないと確信している場合は、24時間のmax-age
を自由に設定できます。再デプロイします。