2

SquishIt をウェブアプリに統合しようとしています。ローカルでのテストから気付いたのは、SquishIt がファイルを 1 回だけ生成することです。他のSOの回答に基づいて、SquishItコードを読んで、HttpCacheに生成されたハッシュキーの値が含まれていない場合にファイルが生成されることがわかりました。

アプリを再起動せずに、または HttpCache をクリアせずに、生成された縮小ファイルを削除すると、SquishIt はファイルを再作成しません。

ファイルが存在しない場合、SquishIt に強制的にファイルを再作成させる方法はありますか?

前に RequestReduce を使用していましたが、css/js ファイルのみが編集された場合 (つまり、web.config が編集されておらず、アプリが再起動されていない場合)、css/js の変更を常に反映するとは限らないことに気付きました。変更が確実に反映されるように、デプロイ時に生成されたすべてのファイルを常に削除します。

  1. web.config が変更されていなくても、SquishIt は常に変更されたコードを検出し、アプリは再起動されず、HttpCache はクリアされませんか?

    [BundleCache.Add] ( https://github.com/jetheredge/SquishIt/blob/master/SquishIt.Framework/BundleCache.cs#L40-54 ) メソッドのコードは、この質問に答えるのに役立ちます

  2. 生成されたファイルを削除するだけで、強制的に SquishIt を生成されたファイルにすることはできますか?

    対処する必要があるシナリオについて考えた後、これは間違った質問です。

編集:

  1. これらの生成されたファイルのクライアントに送信されるキャッシュ ヘッダーは何ですか?

私のシナリオは次のとおりです。デフォルトの JS ミニファイアーから JsMinMinifier に切り替えました。ファイルを削除 (RenderOnlyIfOutputFileIsMissingが設定されている) し、アプリを再起動すると、縮小されたファイルが生成されました。ただし、それらは以前のファイルと同じ名前でした (別の名前であると誤って想定していました)。

ブラウザを更新すると、新しく生成されたファイルがサーバーによって送信されたことが示されました。どうしてそうなった?資産に長い有効期限のキャッシュ ヘッダーが設定されている場合、ブラウザーはサーバーから新しいファイルを要求するべきではありません。(Firebug でアセットを調べたところ、キャッシュ ポリシーを理解できませんでした。私には、数分間キャッシュするように設定されているように見えます)。

編集2:

私の結論は、生成されたファイルを削除して再生成する必要はないということです。対応するソース ファイルが変更された場合、SquishIt は適切なファイルを生成します。

4

1 に答える 1

3
  1. ソースファイル (生成されたものではない) のキャッシュ依存関係を追加しているため、それらのいずれかが編集された場合、バンドル キャッシュ内のエントリが無効になるはずです。BundleCache.Addを参照してください。

  2. いいえ - エントリがバンドル キャッシュに格納されると、出力ファイルがそこにあると想定されるため、ファイルが見つからないことになります。これは設計によるものであり、それに対する説得力のあるケースは実際には聞いていません。

デプロイ時に生成されたファイルを削除しても問題ありませんが、厳密に必要ではない場合でも、アプリを再起動する必要はありませんか?

ファイルが残っていることを本当に懸念している場合は、ファイル システムなしで SquishIt を使用することを検討してください。

于 2013-06-13T13:34:13.800 に答える