2015-01-22 1 views
0

Я работаю над веб-приложением, которое содержит множество js-скриптов, упакованных в пакеты, используя библиотеку System.Web.Optimization.Как предварительно генерировать пакеты js вне веб-приложения?

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

Мне удалось сохранить результат GenerateBundleResponse() в файлы, а затем просто загрузить содержимое этих файлов в кеш в Application_Start, но для этого требуется запустить приложение дважды: первый «холодный» запуск готовит скрипты и сохраняет их в файлы, а второй может использовать подготовленные скрипты и запускаться очень быстро.

public abstract class FileBasedBundle : Bundle 
{ 
    public override BundleResponse GenerateBundleResponse(BundleContext context) 
    { 
     if (File.Exists(bundlePath)) 
     { 
      var content = File.ReadAllText(bundlePath); 
      var fileList = GenerateFileList(context); 
      return new BundleResponse(content, fileList); 
     } 

     var response = base.GenerateBundleResponse(context); 
     File.WriteAllText(bundlePath, response.Content); 
     return response; 
    } 
} 

Вопрос заключается в том: как я могу подготовить связки в каком-то Util или сценарии для развертывания на удаленных машинах, чтобы не запустить приложение дважды? Существуют ли альтернативы System.Web.Optimization для запуска внешнего контекста веб-приложения? Спасибо!

ответ

2

Возможно, попробуйте этот комплект - Compile & Минимизировать Менее/Sass/Stylus/Css/JS/CoffeeScript/LiveScript файлы.

https://github.com/ServiceStack/Bundler

+0

Спасибо за ваш ответ, это определенно стоит попробовать. – ZuoLi