問題タブ [sw-toolbox]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 新しい Service Worker の sw-precache アクティベーションは、キャッシュ無効化を保証しますか?
sw-precache
と一緒に使用してsw-toolbox
、Angular アプリのキャッシュされたページをオフラインで閲覧できるようにしています。
アプリは、node Express サーバーを介して提供されます。
私たちが遭遇した問題の 1 つはindex.html
、新しい Service Worker のアクティブ化で他のアセットが更新されているにもかかわらず、キャッシュ内で が更新されていないように見えることがあるということです。
index.html
これにより、この場合、既存のバージョン管理されていないアセットを読み込もうとしている古いアセットがユーザーに残り/scripts/a387fbeb.modules.js
ます。
index.html
が正しく更新された別のブラウザでは同じハッシュを持つように見えるため、何が起こっているのか完全にはわかりません。
1つのブラウザで古い(問題のある)Index.html
2cdd5371d1201f857054a716570c1564
(ハッシュでキャッシュされます)には以下が含まれます:
その内容で。(このファイルはキャッシュにもリモートにも存在しません)。
別のブラウザで更新された(良い)index.html
(同じでキャッシュされ2cdd5371d1201f857054a716570c1564
ます)には以下が含まれます:
これら 2 つのキャッシュは同じですが、ブラウザーに返されるコンテンツは異なります。
これはどうすればいいですか?sw-precache
これは、新しい SW がアクティブになったときにアトミック キャッシュ バスティングが保証されないということですか? どうすればこれを防ぐことができますか?
これらが役立つ場合、これは から生成された service-worker.jsファイルですsw-precache
。
注:これを回避するためremoteFirst
に戦略(少なくとも)を使用できることに気づきました。しかし、パフォーマンスを最大限に引き出すために戦略をindex.html
使用する方法を理解し、理解したいと思っています。cacheFirst
注2:他の関連する質問で、キャッシュの名前を変更して古いキャッシュをすべて強制的に破棄できることを見ました。しかし、これはsw-precache
更新されたコンテンツのみを破棄するという考えに勝っているように見えますか? これは行く方法ですか?
注 3 : ブラウザーをハード リロードしても、Web サイトが壊れていることに注意してください。Service Worker キャッシュをスキップするため、サイトは機能しますが、キャッシュはまだ間違っています - Service Worker がアクティブ化されていないようです - 私の推測では、この特定の SW は既にアクティブ化されていますが、キャッシュを正しくバストすることに失敗しているためです。その後のハード リフレッシュ以外のアクセスでは、引き続き壊れた が表示されindex.html
ます。
angularjs - Service Worker Toolbox を使用した XHR get 呼び出しのキャッシュ
サイトが行っている XHR get 呼び出しの結果を保存しようとしているので、インターネット接続がない場合は cache/indexedDB からデータを取得します。Service Worker 内でSw-toolboxを使用しています。アクセスしているURLは「https://www.domain.in/field?searchparams=123」で、やってみました、
しかし、私は何のリードも見つけられません。私はそれを間違っていますか? 助けてください 。
caching - サービス ワーカーのランタイム キャッシュ
Service Worker を使用してプログレッシブ Web アプリを作成しており、Service Worker ツールボックスを使用してコンテンツをキャッシュしています。私のコンテンツをキャッシュするService Workerコード:
コンソールにエラーが表示されていないため、コードは正常に実行されています。しかし、クラウドフロントからの画像または上記で構成された URL がキャッシュされ、キャッシュ自体からレンダリングされているかどうかを確認するにはどうすればよいですか。
caching - 静的リソースをプリキャッシュする最善の方法は何ですか?
sw-precache
すべての静的リソースの事前キャッシュを許可しようとしています。ファイル名に MD5 フィンガープリントが含まれるバージョン管理されたリソースをプリキャッシュするために、どのアプローチに従うべきかを考えています。
最初の解決策はsw-toolbox
、URL パターンを使用して一致させ、それらをキャッシュすることです。新しい指紋でファイルを生成するたびに、自動的にキャッシュが取得されます。はい、古いキャッシュを独自に管理するためのキャッチがあります。
2番目の解決策はsw-precache
同じものを処理することであり、古いキャッシュを自動的に処理するという利点があります。試してみましたが、複数のページを更新したり、ブラウザのタブを再度開いたりしても、リソースが更新されないことがあります。
提案してください !
service-worker - サービスワーカーを介して動的 URL の依存関係を解決するには?
Sw-precache
私はとライブラリに精通していますがSw-toolbox
、Angular を使用してプログレッシブ Web アプリを構築する際に動的依存関係に対応する方法についてはまだ頭を悩ませています。
Sw-precache ビルド プロセスを使用して、アプリケーション用に bundle.js、bundle.css、およびいくつかの静的テンプレートを事前にキャッシュしました。(すべてのテンプレート (.html ファイル) が bundle.js と bundle.css に依存していると仮定します)
事前にキャッシュされていないテンプレートを更新するとどうなりますか? テンプレートと合わせて bundle.js/css を確実に更新するにはどうすればよいですか。
既にキャッシュされているテンプレートを更新するとどうなりますか。事前にキャッシュされた bundle.js/css ファイルと連動して常に更新されますか。
最後の使用例は、テンプレートが既に事前にキャッシュされているが、src 属性を持つインライン スクリプトがあり、このスクリプト ファイルがどこにもキャッシュされていない場合です。テンプレートとスクリプト ファイルに変更を加えたとします。スクリプト ファイルと組み合わせてテンプレート ファイルを確実に更新するには、どのキャッシュ アプローチに従う必要がありますか。
純粋な App-shell アーキテクチャに従っているわけではありません。Angular.js を使用して設計されたシングル ページ アプリケーションのようなものです。
browser-cache - swtoolboxルーターの正規表現
サービスワーカーにswtoolboxを使用しようとしています。urlパターンマッチングでネットワークのみ、キャッシュのみにしたい場合があります。
私はまだそれを機能させるために立ち往生しています。
基本的な使用法は問題なく機能しています。
正規表現を使い始めたとき。期待どおりに機能していません。
誰かがそれを試してみたらうまくいくでしょう。最初に正規表現が正常に機能していることを検証するために使用しました。https://regex101.com/
webpack - sw-toolbox urlPattern ハンドラー戦略が設計どおりに機能していることを確認するにはどうすればよいですか?
実行時キャッシュ オプションで sw-precache を指定して sw-toolbox を使用しています。しかし、URLにアクセスしてdevtoolsでネットワークを調べると、最初にネットワークからではなくサービスワーカーからキャッシュされたことが示されます(私が望むように)。たぶん、これらの 2 つのライブラリがどのように連携するかを理解していないだけです。私の現在の実装では、sw-precache を使用して webapp 全体 (非常に小さな webapp) をキャッシュし、ランタイム キャッシュ オプションを使用して、最初にネットワークのハンドラーで URL パターンを使用しました。私の考えでは、アプリ全体がキャッシュされていても、特定の URL パターンに移動すると、ページで使用されるデータはキャッシュではなくネットワークから取得されます。これは間違っていますか?
sw-precache - sw-precache でデフォルトの Cache First 戦略を Network First 戦略に変更するにはどうすればよいですか?
これが私のgulpタスクです:
});
上記の構成から、ログインと管理ルートはネットワークのみを使用してフェッチされ、インデックスルートは最初にキャッシュから提供されますが、サーバー側からページをバインドしているため、ネットワークを最初にしたいと考えています。そのため、ctrl + f5 を押さない限り、動的データはアプリで複製されません。