每次我部署 MVC Web 应用程序时,我的服务器都必须重新缓存所有 js 和 css 包。
因此,部署后第一个视图可能需要几秒钟才能呈现。
有没有办法预先缓存捆绑包?毕竟,文件在编译时是静态的。
每次我部署 MVC Web 应用程序时,我的服务器都必须重新缓存所有 js 和 css 包。
因此,部署后第一个视图可能需要几秒钟才能呈现。
有没有办法预先缓存捆绑包?毕竟,文件在编译时是静态的。
为了解决这个问题,我们用超出 App Pool 生命周期的缓存替换了默认内存缓存。
为此,我们继承ScriptBundle
并覆盖了CacheLookup()
and 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
.