Можете ли вы предварительно кэшировать пакеты ASP.NET? - программирование

Можете ли вы предварительно кэшировать пакеты ASP.NET?

Каждый раз, когда я развертываю веб-приложение MVC, мой сервер должен повторно кэшировать все js и css-пакеты.

Из-за этого для развертывания первого представления после развертывания может потребоваться несколько секунд.

Есть ли способ для пакетов до кеширования? В конце концов, файлы являются статическими во время компиляции.

4b9b3361

Ответ 1

Решение

Чтобы исправить, мы заменили кеш-память по умолчанию кэшированием, которое сохранялось за пределами срока использования приложения.

Для этого мы унаследовали от ScriptBundle и overrode 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.