2

.jsファイルと.cssファイルを組み合わせるために「SquishIt」を使用しています。問題は、他のすべてのリソースが(キャッシュから)200の場合、squishitバンドルの結果が304(変更されない)になることです。通常の方法でファイルを配置すると、必要な200の結果が得られます。私のコードの例:

@MvcHtmlString.Create(@Bundle.JavaScript().Add("~/Scripts/Libs/jquery.cookie.js").Add("~/Scripts/Libs/jquery.dynatree.min.js").Add("~/Scripts/Libs/jquery.json-2.3.min.js").Add("~/Scripts/Libs/jsrender.js").Add("~/Scripts/Libs/jstorage.min.js").Add("~/Scripts/Common/utils.js").Add("~/Scripts/DataServices/AccountDataServices.js").Add("~/Scripts/AccountSelection.js").WithMinifier<SquishIt.Framework.Minifiers.JavaScript.MsMinifier>().Render("~/Scripts/AccSelectionscriptBandle_#.js"))

結果:

ここに画像の説明を入力してください

編集:私は「Debug=false」を使用しています。他のすべてのリソースは200(キャッシュから)です

4

1 に答える 1

6

あなたは正しい方向に進んでいると思いますが、さらに一歩進んで、clientCache設定にもう1つのオプションを追加する必要があります(cacheControlCustom = "must-revalidate"):

    <staticContent>
      <!-- A clients cache will expire 90 days after it is loaded -->
      <!-- each static item is revalidated against the server to see if the LastModifiedDate is different than the If-Modified-Since date-->
      <!-- http://msdn.microsoft.com/en-us/library/ms689443.aspx -->
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="90.00:00:00" cacheControlCustom="must-revalidate"/>
    </staticContent>

cacheControlCustomは、特定の静的ファイルのlastModifiedDateとIf-Modified-Sinceを比較するために、サーバーに対するチェックを強制します。cacheControlMaxAgeを設定すると、これまでのところしか取得できません。特に、サーバー上のファイルを変更した場合、クライアントがファイルを自動的に再プルしない場合があります。あなたが持っている設定(500日)は、ファイルがクライアントのマシンに500日間置かれた後にのみファイルをプルします。それがあなたの意図であるなら、素晴らしい。(また、パッケージ内のjs / cssファイルを変更すると、異なるハッシュ名が生成されるため、SquishItはキャッシュ動作の一部をマスクします。)

コメント内のURLは、MSDNからもう少し説明される場合があります。

于 2012-05-29T20:06:11.353 に答える