私は適度なサイズの Web アプリケーションに取り組んでおり、すべてのブラウザーがキャッシュを使用し、読み込まれているアセットの更新がある場合にのみキャッシュを無効にするための最適なソリューションを考え出そうとしています。
私がここや他の場所で行った調査によると、css や js ファイルなどのアセットに ?v={version#} を追加することは、アセットが削除されたときにキャッシュを自動的に無効にする優れた方法であることに誰もが同意しているようです。更新されます。(ブラウザにキャッシュをクリアするように強制するおよびJavaScript ファイルのブラウザ キャッシュを防ぐためのより良い方法に従って)
しかし、このソリューションは、Web サーバー上に存在するすべてのアセットに一般化する必要があるように思えます。
私の質問は、ビルド スクリプトでウェブサイト全体の各 src="" 属性を調べて、img、css、js のいずれであっても、プログラムで ?={timestamp} を追加することをお勧めします。ここで、タイムスタンプはファイルが最後に変更された時刻。このようにして、開発からステージング、本番にプッシュするたびに、変更されたファイルのみが変更されたタイムスタンプを持ち、ブラウザはそれらのファイルのキャッシュを無効にすることを認識します.
そのアプローチに欠陥はありますか?
注: これをもう少し考えてみると、変更が後で元に戻される場合、タイムスタンプは間違いなく望ましくありません。したがって、 ?={md5(filecontents)} を追加すると、より堅牢なアプローチになります。それにもかかわらず、これをすべてのアセットとすべてのビルドに実装するかどうかについては、まだ疑問が残ります。