1

ときどき、私のサイトを使用している人々からレイアウトの癖についての報告を受け取ります。その答えは、Ctrl-F5 でブラウザーを更新するか、キャッシュをクリアすることです。

これを処理する最も簡単な方法は、このようなリソースへのパスに SVN リビジョンを追加することですstyles.css?1234が、これは少し手間がかかるのではないでしょうか (たとえば、リソースを変更しない SVN リビジョンは不要なフェッチを強制します)。 . また、これらすべてのパスを調べて見つけ、SVN リビジョンを出力するコードを追加する必要があります。

これを処理するためのより良い/標準的な方法はありますか?

ちなみに、私は Django と Apache を mod_wsgi と共に使用しています。

4

2 に答える 2

2

ファイルの最終変更タイムスタンプを使用することをお勧めします。そうすれば、バージョン番号で遭遇する問題を回避できます。また、リクエストごとにディスクにアクセスして最新のリビジョン番号を取得するか (このアプローチを使用する場合はキャッシュを使用)、デプロイ時に「コンパイル」ステップで include ステートメントを変更する必要があります。

また、styles.css?123一部のプロキシ/ブラウザを実行すると、有効期限ヘッダーに関係なく、ファイルがまったくキャッシュされない場合があります。styles.123.cssすべてのエージェントが別のファイルとして扱うようにすることをお勧めします。

この問題をすでに解決しているプロジェクトがあり、私はそれを使って大成功を収めました: django-compress。javascript と css を圧縮する方法を指定すると、縮小/圧縮され、それらが 1 つの大きなファイルに結合され、その大きなファイルにタイムスタンプを含む特別なファイル名が付けられます。また、どのファイルを含めるかを認識しているファイルを含めるときに使用するテンプレート タグも取得します。

Django 1.3 には、静的メディアの提供に役立つstaticfilesというアプリも含まれますが、バージョン管理の問題は解決されません。

于 2010-11-23T10:05:03.967 に答える
0

私が過去に使用したテクニックの 1 つは、すべての静的アセット参照にテンプレート タグを使用することです。その後、必要に応じてそのタグを変更できます。URL をアセット ディレクトリに変更する必要がある場合と、必要に応じてキャッシュ無効化を追加する必要がある場合の両方です。

ファイルが変更されていなくても、SVN リビジョンごとに不必要なフェッチを強制する心配はありません。毎回新しいファイルを提供するよりも効率的です。

この種のことを行うさまざまなライブラリがあります。knutin はすでに django-compress について言及していますが、 django-static-managementdjango-static、そしておそらく他にもたくさんあります。キャッシュ無効化に対処することに加えて、これらのアプリには通常、何らかの圧縮/連結が含まれているため、複数の CSS または JS ファイルが 1 つに連結されて HTTP リクエストが削減されます。

于 2010-11-23T11:13:00.803 に答える