web-dev-qa-db-ja.com

Service WorkerのJavaScript更新頻度(24時間ごと?)

MDNのこのドキュメント

その後、24時間ごとにダウンロードされます。 mayより頻繁にダウンロードされますが、24時間ごとにダウンロードする必要があります。これは、不正なスクリプトが長時間迷惑にならないようにするためです。

FirefoxとChromeにも同じことが当てはまりますか? OR Service Worker JavaScriptの更新は、ユーザーがサイトに移動したときにのみ発生しますか?

59
shailesh mishra

注: 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を自由に設定できます。再デプロイします。

148
Jeff Posnick