CSS / Javascriptに遠い将来の期限切れヘッダーを設定しているので、ブラウザーがファイルがキャッシュされた後、ファイルを再度要求することはありません。また、ファイルが変更された場合にクライアントが認識できるように、単純なバージョン管理メカニズムもあります。
基本的に私はテンプレートタグを持っていて、次のようなことをします
<script type="text/javascript" src="{{ MEDIA_URL }}{% versioned "javascript/c/c.js" %}"></script>
になります
<script type="text/javascript" src="http://x.com/media/javascript/c/c.min.js?123456"></script>
。
テンプレートタグはファイルを開きjavascript/c/c.js.v
、バージョン番号を見つけてクエリ文字列に追加します。バージョンは、ファイルが変更されたかどうかをチェックするシェルスクリプト(今のところ手動で実行され、おそらくpre-commitフックが追加されます)によって生成されます(を使用してgit diff
)。
これは、次の場合を除いて、すべて正常に機能しています。
画像にも同じ種類のバージョニングを実装したいと思います。ただし、画像は静的ファイル(nginxによって提供される)であるCSSから参照できるため、テンプレートタグはありません。
ファイルのバージョン管理のためのより良いアプローチは何ですか?
または、テンプレートタグを、応答を返す前にすべてのリンクを変更するミドルウェアに置き換えることを考えています。これは、誤って省略される可能性のあるテンプレートタグよりも優れています。しかし、それでもCSSから参照される画像の問題は解決しません。
また、クエリ文字列の一部としてバージョンを指定すると、特定のプロキシがファイルをキャッシュしないという問題が発生する可能性があることを認識しています。たとえば、バージョンをファイル名の一部にすることを検討しますjavascript/c/c.123456.js
。
注:Djangoを使用してこの問題を解決する方法はないようです(明らかに、Djangoを介してCSSを提供していないため)。しかし、おそらくいくつかのnginxトリックを含む解決策が必要です。