15

MVC Web アプリケーションをデプロイするたびに、サーバーはすべての js および css バンドルを再キャッシュする必要があります。

このため、デプロイ後に最初のビューがレンダリングされるまでに数秒かかる場合があります。

バンドルを事前キャッシュする方法はありますか? 結局、ファイルはコンパイル時に静的です。

4

1 に答える 1

12

解決

これを修正するために、デフォルトのメモリ キャッシュを、アプリケーション プールの寿命を超えて持続するキャッシュに置き換えました。

これを行うために、 と を継承しScriptBundleてオーバーライドCacheLookup()UpdateCache()ました。

/// <summary>
/// override cache functionality in ScriptBundle to use 
/// persistent cache instead of HttpContext.Current.Cache
/// </summary>
public class ScriptBundleUsingPersistentCaching : ScriptBundle
{
    public ScriptBundleUsingPersistentCaching(string virtualPath)
        : base(virtualPath)
    { }

    public ScriptBundleUsingPersistentCaching(string virtualPath, string cdnPath)
        : base(virtualPath, cdnPath)
    { }

    public override BundleResponse CacheLookup(BundleContext context)
    {
        //custom cache read
    }

    public override void UpdateCache(BundleContext context, BundleResponse response)
    {
        //custom cache save
    }
}

合併症

注目に値する唯一の他のレンチは、永続的なキャッシュ ツールに関係していました。キャッシュするには、シリアライズ可能なオブジェクトが必要でした。残念ながら、BundleResponseとしてマークされていませんSerializable

BundleResponse私たちの解決策は、値の型に分解するための小さなユーティリティ クラスを作成することでした。これを行うと、ユーティリティ クラスをシリアル化できました。次に、キャッシュから取得するときに、BundleResponse.

于 2013-07-16T19:46:50.570 に答える