GWTコンパイラは、コード分割の結果として、コードの断片を生成フェッチトリガされません(詳細hereを参照)GWTのコードフラグメント(.cache.js)は、サービス労働者がイベント
最初のダウンロードファイルは、{英数字}と命名されます。 cache.js(例:1805B2053A824F148DB6D05B2186F955.cache.js)と他のフラグメント{number} .cache.js(例:1.cache.js)を下の図に示します。
私はアプリはオフラインで作業したいとサービス労働者とGWTアプリケーションを開発しようとしています。一旦キャッシュされ、オフラインになると、最初のダウンロードファイルのGET要求はServiceWorkerのFETCHイベントをトリガーしますが、個々のコードフラグメントはイベントをトリガーしません。何らかの理由でサービスワーカーをバイパスしているように見えます。
デモンストレーションのために、https://gwt-pwa-demo.herokuapp.com/pwademo.htmlでアプリをチェックしてください。サービスワーカーを使用するGWTアプリです。それは私のアプリではない、私はデモンストレーションのためにそれを使用しています。
アプリケーションを読み込むと、すべてのファイルがキャッシュされます。いいえ、Chromeの開発ツールからオフラインになり、アプリを更新します。アプリがまだ表示され、Service Workerから最初のダウンロードファイルがロードされていることがわかります。ここで、Paris/Berlin/Londonをクリックして、フラグメント1.cache.jsなどをロードします。これらはディスクキャッシュからのものであり、ServiceWorkerによるキャッシュストレージではないことに注意してください。コンソール出力を見ると、ServiceWorker Fetchイベントから出力されるこれらのフラグメントのログは表示されません。
さらに明確にするために、アプリケーションはオフラインでしか動作しません。これは、フラグメントがディスクキャッシュから取得されるためです。これらのフラグメントがディスクキャッシュに存在しない場合、アプリケーションは動作しません。フラグメントがCache Storageに存在する場合でも、ServiceWorkerはこれらの要求をインターセプトできないため、ロードされません。これを実際に実行するには、次の手順に従います。
- アプリを一度読み込んだとすると、開発ツール - >アプリケーション - >ストレージのクリアとサイトデータのクリアを開いてください。キャッシュストレージ内のキャッシュもクリアされていることを確認してください。
- アプリをもう一度https://gwt-pwa-demo.herokuapp.com/pwademo.htmlに読み込みます。
- キャッシュが再度作成され、キャッシュにフラグメントが表示されます。
- デベロッパーツールが開いているときに、Chromeで「Empty Cache & Hard Reload」を使用してアプリをリロードします。
- これはディスクキャッシュをクリアしますが、キャッシュストレージはまだ存在します。
- オフラインにしてアプリを更新すると、最初のアプリがまだキャッシュストレージから読み込まれます。
- しかし、パリやロンドンをクリックするとコードフラグメントの読み込みが開始されますが、失敗します。
GWTでも可能ですが、カスタムリンカーが必要です。おそらく、私は週末にはGithubのサンプルコードに時間があります。 – notz