私たちのプロジェクトでは、頻繁な展開プロセスに従います。すべての展開で、クライアントはブラウザのキャッシュのために変更を反映するためにブラウザを更新する必要があります。どのようにこの状況を避けることができるかを知りたいと思います。展開するときは、リフレッシュの必要がないすべてのユーザーのブラウザに直接反映する必要があります。この問題を解決するために私を助けてください。すべてのビルドでブラウザのリフレッシュの状況を避ける必要があります
答えて
技術的にあなたはそこに直接アクセスできないため、ブラウザキャッシュをリフレッシュできません。できることはキャッシュ無効化です。サーバーにデプロイするたびに、jsとcssのファイル名を変更します。中
例えばapp_v1.jsのapp_v2.js ...
と
app_v1.cssのapp_v2.css ...
ブラウザをデプロイするたびにこの方法で新しいjsおよびcssファイルを取得する必要があります。詳細については、
は
このリンクをチェックするホットモジュールの交換と呼ばれるソリューションがあります。これにより、Webpackバンドルがシームレスに置き換えられます(既に使用している場合)。
一部の参考文献については、What exactly is Hot Module Replacement in Webpack?を参照してください。 HMRの設定は非常に複雑で、フレームワークごとに異なります。
webpack-dev-serverもwebpackに依存しますが、はるかに簡単です。自動的に更新ボタンがプッシュされます。
レスポンスヘッダーのキャッシュディレクティブを更新して、ブラウザのキャッシュに許容されるキャッシュ期間を短縮または削除することを検討してください。
あなたのウェブサイトが現在使用しているものを確認するには、「検査」オプションを有効にして「ネットワーク」タブを選択してChromeでページを表示します。ダウンロードしたファイルを選択すると、「レスポンスヘッダー」の情報が表示されます。
例として、このSOページでは、「max-age」の値が604800(秒、7日)のados.jsというスクリプトファイルをダウンロードします。これは、Webサーバーからそのファイルの新しいバージョンが利用可能かどうかを確認する前に、ブラウザが待機するまでの時間です。ファイルがほとんど変更されない場合、7日間は許容される可能性があります。
しかし、7日の最大エージングは、ブラウザキャッシュされたファイルが頻繁に変更される動的な状況のための期間の長すぎる可能性があります。
詳細については、このMDNページのHTTP cachingを参照してください。
キャッシュ制御ディレクティブの変更は、Webサーバーによって異なります。 ASP.NETの場合、web.configファイルで実行できます。
考慮すべき1つのオプションは、リリースの2段階アプローチです。
フェーズ1:保留中のリリースによって更新される予定のキャッシュ可能ファイルのリリース前に、キャッシュ制御ディレクティブをキャッシュなしに変更します。
次に、更新されたファイルの現在の最大有効期間の値が現在設定されている最長時間を待ちます。これにより、現在のウェブサイトのブラウザは「キャッシュなし」指示を受け取ることができます。その後、現在のWebサイトのすべてのブラウザは、ファイルの更新がリリースされた直後に更新プログラムを取得する準備が整いました。
フェーズ2:目的のmax-ageキャッシュ制御命令を使用して、ファイルの更新をWebサイトにリリースします。これらの更新は、フェーズ1で行われた処理のため直ちに取得する必要があります。
もう1つの方法は、現在の最大有効期間の値を5分などの小さな値に短くすることです。このオプションは簡単ですが、リリース後5分間で問題が発生する可能性があります。しかし、時間間隔が短いと、キャッシュされたブラウザファイルに対する更新の可能性および/または影響が減少します。
キャッシュをフロントエンドから無効にすることで、キャッシュを防止できます。
v={{number-of-version}}
を追加することができます。ロードされたバージョンが必要なものであることを常に確認してください。
gulpプラグインは、ビルド段階でファイルのバージョンを管理するため、手動で行う必要はありません。それは便利で、簡単にビルドプロセスに組み込むことができます。ここにリンクがありますgulp-annotate
- 1. Qt5 - ビルド時に追加ファイルをコピー - 多くの状況で動作する必要があります
- 2. Firefoxのメッセージを避ける必要があります
- 3. Kotlinのコンストラクタパラメータでval/varが必要な状況はありますか?
- 4. シングルトンパターンを避ける必要がありますか?
- 5. エリクサーで投げ捨てる必要のある状況は?
- 6. Buildrootツールチェーン - 一度だけビルドする必要があります
- 7. Webusercontrolが必要な状況
- 8. REST APIがHTTPステータスを返す必要がある状況503
- 9. ボタンクリックで角度アプリをリフレッシュする必要があります
- 10. この状況のためにCassandra.yamlでどのアドレスを変更する必要がありますか?
- 11. テストのために静的メソッドを避ける必要がありますか?
- 12. このような状況では、どのクラス名をジェネリックに挿入する必要がありますか?
- 13. この状況でどのようなパターンを使用する必要がありますか?
- 14. どのprotobufバージョンをビルドする必要がありますか?
- 15. この状況でバックグラウンドワーカーまたはタイマーを使用する必要がありますか?
- 16. なぜこの状況でcomponentWillReceivePropsが必要なのですか?
- 17. 非常にトリッキーなADO.Netの状況は、エラーをスローしませんが、する必要があります
- 18. Perlの継承 - 私はパッケージの発信者を見つける必要がある状況がある
- 19. 1つの列に重複がない状況でテーブルから選択する必要があります
- 20. どのような状況で `multiprocessing.Pool.imap_unordered`を使用する必要がありますか?
- 21. Android - このような状況でハンドラを使用する必要がありますか?
- 22. どのような状況でEntity SQLを使用する必要がありますか?
- 23. 複雑のPInvokeの状況 - のオーバーロード機能を避ける
- 24. 状況に応じて、共通コードでクラス名を印刷する必要があります
- 25. ブラウザでJavascriptを使用する必要があります。
- 26. ブラウザで角度を指定する必要があります
- 27. WebブラウザでExcelを表示する必要があります
- 28. ビルドのすべてのビルドサブミットは、同じプロジェクトコレクションからのプロジェクトインスタンスを使用する必要があります
- 29. Doctrine 1の重複主キーの状況、回避策はありますか?
- 30. ostream_iteratorインクリメントはどのような状況で使用する必要がありますか?
幅が広いです。これはすばらしいと思いますが、実際にオーバーヘッドが過度に増加します。突然ユーザーに変わることも良い考えではありません。開発や生産に使用していますか?コードを変更しているのか、パラメータ/テキストだけを変更していますか? –
現在、開発用にのみ使用しています。時にはコードを変更することもあります。 –