4

私の問題に関連するSOに関する多くの質問と回答があります[ブラウザにjs/cssを永久にキャッシュさせたいです。新しいリリース中に、js / cssファイルの一部が更新されている場合、ブラウザはそれらをリロードしてキャッシュする必要があります。]

この解決策は私にとって最も適切であるように思われました: ブラウザにキャッシュされたCSS / JSファイルをリロードさせるエレガントな方法は何ですか?

しかし、私が理解できないことが1つだけあります。このソリューションはlast_modified_timeを利用します。ただし、使用は許可されていません。他のメカニズムを使用する必要があります。

オプションは何ですか?ビルド中にバージョンを事前に計算し、ビルドスクリプトを介してjspsでバージョンを更新(置換)する可能性はありますか(展開前に、バージョン番号が実行時に計算されないようにします)?この目的のための既存のツールはありますか?私はJava/Jspを使用しています。

4

3 に答える 3

2

私たちはいつも使用します

file.css?[deploytimestamp]

このようにして、CSSファイルはクライアントでの展開ごとにキャッシュされます。縮小されたJavaScriptについても同じことが言えます。これはあなたにとっての選択肢ですか?

于 2012-08-16T12:42:13.867 に答える
2

それは最善の方法ではないかもしれませんが、これは私が今していることです:

  1. 私のすべてのjs/cssには[ソース管理=svn]リビジョン番号があります
  2. 私のjspの参照は、/ foo / path1 / path2 / xyz000000/fooのようなものです。
  3. ビルドステップ1-css|jsファイルとそのリビジョン番号のマップを生成します
  4. ビルドステップ2-jspsのxyz000000参照をsvnリビジョンのハッシュに置き換えます
  5. すべての/foo/ path1 / path2 / xyz <767678>/fooを送信するURLリライターのルール。/foo/path1/path2/foo.[js|css]へ
  6. css|jsファイルを無限にキャッシュします
  7. コミットがあると、リビジョン番号が変更され、.jspの参照も変更されます。
于 2012-08-29T07:32:56.753 に答える
1

展開後、各cssファイルのmd5-hashを生成します。cssのURLのタイムスタンプの代わりにこのハッシュを使用してください。

file.css?[hash of file.css contents]

いくつかのパフォーマンスを得るために、展開後にハッシュを一度計算して保存するのが賢明かもしれません。それらをデータベースに保存したり、PHP配列のWebサイトコードに含まれている別のファイルに保存したりすることもできます。

于 2012-08-16T13:51:02.293 に答える