私はサーバー側でレンダリングされた反応型アプリケーションを持っており、サービスワーカーキャッシュを追加したいと思います。サービスワーカーでワークボックスとサーバー側でレンダリングされたSPA
アプリでは、ログインして保存した設定を見ることができます。初期ロード時に、サーバーは認証クッキーに基づいて事前レンダリングされたこれらの設定でアプリケーションを提供します。ユーザーがログインしていない場合、サーバーはログインフォームを事前にレンダリングします。
私はホームページのindex.htmlのデフォルトのキャッシュ最初の戦略を使用している場合は、ユーザがログアウトしてページを更新するとき、そして、彼らは彼らはまだログインして、キャッシュされたバージョンが表示されます。
ネットワーク-最初の戦略を使用してindex.htmlはこの問題を部分的に解決しますが、このシナリオでは失敗します。ユーザーはログアウトしたり、設定を変更したり、オフラインにしたり、ページを更新したりします。リフレッシュする前に実際の最新版を見ただけです。
私が考えることのできる解決策の1つは、非GETリクエストが発生するたびにindex.htmlキャッシュを更新することです。ログアウトは、たとえばDELETEリクエストでなければなりません。これはすべてを実際に解決し、フレームワークに含めるのに十分普遍的であるかもしれません。
とにかく、私はワークボックスで非GETリクエストを聴く方法を考え出すことができますが、リスナーでindex.htmlキャッシュを更新するにはどうすればよいですか?
私はワークボックスのソースコードを検査し続けますが、事前に感謝の意を表します。
ありがとうございます@jeff、私は余分な「取得」リスナーを作成しました:https://github.com/vfeskov/ win-a-beer-react/blob/master/client/src/service-worker.js#L10、それはあなたですか?そのような振る舞いをワークボックスでサポートすることができますか? –
主なことは、これはサービスワーカーの内部で実装する必要はないということです。キャッシュ・ストレージAPIは、Webページのコンテキストからアクセスできます。ユーザーがデータをクリアする必要がある(「ログアウト」ボタンなどをクリックするなどの)サイトで操作を行うと、キャッシュをログアウトを処理する同じ関数の一部。 –
ログアウトしてオフラインにしてからページを更新するときに、大文字と小文字を区別したいので、キャッシュのクリアでは不十分です。キャッシュはこれをサポートするために削除されるのではなく、リフレッシュする必要があります。また、キャッシュのリフレッシュはブラウザのメインスレッドに属していないようですが、どう思いますか? –