Can you pre-cache ASP.NET Bundles? Can you pre-cache ASP.NET Bundles? asp.net asp.net

Can you pre-cache ASP.NET Bundles?


Solution

To fix we replaced the default memory cache with caching that persisted beyond the App Pool life.

To do this we inherited from ScriptBundle and overrode 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    }}

Complications

The only other wrench worth noting had to do with our persistent caching tool. In order to cache we had to have a serializable object. Unfortunately, BundleResponse is not marked as Serializable.

Our solution was to create a small utility class to deconstruct BundleResponse into its value types. Once we did this we were able to serialize the utility class. Then, when retrieving from the cache, we reconstruct the BundleResponse.