MVC Web アプリケーションをデプロイするたびに、サーバーはすべての js および css バンドルを再キャッシュする必要があります。
このため、デプロイ後に最初のビューがレンダリングされるまでに数秒かかる場合があります。
バンドルを事前キャッシュする方法はありますか? 結局、ファイルはコンパイル時に静的です。
MVC Web アプリケーションをデプロイするたびに、サーバーはすべての js および css バンドルを再キャッシュする必要があります。
このため、デプロイ後に最初のビューがレンダリングされるまでに数秒かかる場合があります。
バンドルを事前キャッシュする方法はありますか? 結局、ファイルはコンパイル時に静的です。
これを修正するために、デフォルトのメモリ キャッシュを、アプリケーション プールの寿命を超えて持続するキャッシュに置き換えました。
これを行うために、 と を継承し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
.