Насколько я вижу минимизация html чаще всего заключается в удалении пробелов и перносов строки, это же не много. + html шаблоны весят не так много как js и css(по моему личному опыту).
В bundletransfromer не планируется добавить аналогичную фичу(html bundle, с возможностью сжатия)?
Мне кажется, что реализация HTML-бандлов очень специфична для конкретного проекта и зависит от используемого MV*-фреймворка. Реализация HTML-бандлов в Web Essentials 2013 слишком простая и ей не хватает генерации именованных контейнеров.
По поводу написания модуля для Bundle Transformer пока не могу ничего сказать, потому что не вижу необходимости в использовании инфраструктуры Bundle Transformer для реализации данного функционала. Скорее всего, это будет отдельное расширение под Microsoft ASP.NET Web Optimization Framework, которое будет выпущено как модуль для WebMarkupMin. В качестве основы можно взять код из 5-й главы обучающего курса Трэвиса Госселина «ASP.NET Bundling, Minification & Resource Optimization».
1) Source map мог бы быть доступен через VirtualPath, аналогично тому как вы это сделали
Bundle Transformer производит только трансформации (классы StyleTransformer и ScriptTransformer – это просто реализации интерфейса System.Web.Optimization.IBundleTransform), всю остальную работу, за исключением отладочных HTTP-хэндлеров, делает System.Web.Optimization (он же Microsoft ASP.NET Web Optimization Framework).
2) less/sass возможно, но что такого происходит с typescript, что сломает source map?
В документирующих тегах <reference> также производится преобразование относительных путей в абсолютные:
Если бы все было настолько легко и просто, то поддержка генерации .map-файлов уже давно появилась бы в аналогичных продуктах (например, Cassette и SquishIt).
Некорректно сравнивать Microsoft ASP.NET Web Optimization Framework + Bundle Transformer с Grunt/Gulp, т.к. это совершенно разные классы инструментов. Сравнение с Sprockets было бы логичным.
Скорее всего, поддержки .map-файлов не будет. Перечислю основные проблемы:
Bundle Transformer ничего не записывает в файловую систему, потому что является расширением для System.Web.Optimization. Уже были попытки добавить в System.Web.Optimization генерацию встроенных source map`ов (например, проект AspNetBundling), но они оказались неудачными.
Перед трансляцией LESS-, Sass- и TypeScript-файлов Bundle Transformer производит их предварительную обработку (например, преобразует относительные пути в абсолютные), а такая обработка ломает любые source map`ы. Добавьте еще к этому наличие возможности добавлять пользовательские постпроцессоры и трансформации элементов.
Bundling and Minification (он же Microsoft ASP.NET Web Optimization Framework) работает только на уровне ASP.NET. Рекомендую вам посмотреть инструменты, создающие бандлы на этапе сборки проекта (например, Web Essentials или Task Runner Explorer).
1. На каждый лэйаут — 1 бандл.
2. Бандлы подключаются только на лэйаутах.
3. Вводим понятие групп, которое будет являться просто массивом строк.
Нужно понимать, что при первоначальной обработке каждого бандла (например, минимизации) расходуются ресурсы процессора и память. Кроме того, код обработанных бандлов кэшируется в памяти веб-сервера. Таким образом, при использовании вашего подхода возникает лишняя нагрузка на сервер.
Классические подходы позволяют более эффективно использовать серверный и браузерный кэш. Если они не подходят вам, то используйте RequireJS.
Понятно, что Closure Stylesheets – это препроцессор, но, тем не менее, разработчиками заявлена поддержка минимизации обычных CSS-файлов. Речь идет о том, что он пока еще не готов для массового использования в качестве CSS-минимизатора (в данном случае, он не может распарсить bootstrap.css даже с включенной опцией --allow-unrecognized-functions).
Не учитывается тот факт, что большинство .NET-разработчиков держит свои проекты на CodePlex. Кроме того, еще есть Bitbucket, Google Code и старенький SourceForge.
Просто я оценивал CSSO с точки зрения опыта работы с другими CSS-минимизаторами, в которых не реализована структурная минимизация. К сожалению, пока CSSO не с чем сравнить, т.к. WebGrease Semantic CSS Minifier по-прежнему содержит ошибки.
Для HTML-кода используется большое количество оптимизаций, и все они описаны в самой первой статье «WebMarkupMin HTML Minifier – современный HTML-минимизатор для платформы .NET».
WebMarkupMin не ограничивается только удалением пробельных символов. Используются и другие оптимизации, которые описаны в самой первой статье «WebMarkupMin HTML Minifier – современный HTML-минимизатор для платформы .NET».
Эффективность минимизации HTML-кода не такая высокая, как при минимизации JavaScript и CSS, но, тем не менее, она ощутима. Рекомендую вам прочитать последние статьи Кристенсена «Effect of tabs vs. spaces in HTML files» и «Effects of GZipping vs. minifying HTML files». Чтобы проверить эффективность WebMarkupMin вы можете даже не устанавливать его, а просто протестировать на сайте WebMarkupMin Online.
Мне кажется, что реализация HTML-бандлов очень специфична для конкретного проекта и зависит от используемого MV*-фреймворка. Реализация HTML-бандлов в Web Essentials 2013 слишком простая и ей не хватает генерации именованных контейнеров.
По поводу написания модуля для Bundle Transformer пока не могу ничего сказать, потому что не вижу необходимости в использовании инфраструктуры Bundle Transformer для реализации данного функционала. Скорее всего, это будет отдельное расширение под Microsoft ASP.NET Web Optimization Framework, которое будет выпущено как модуль для WebMarkupMin. В качестве основы можно взять код из 5-й главы обучающего курса Трэвиса Госселина «ASP.NET Bundling, Minification & Resource Optimization».
<div id="ИМЯ_ФАЙЛА_БЕЗ_РАСШИРЕНИЯ" style="display: none;">…</div>
или
<script type="ТИП_СОДЕРЖИМОГО" id="ИМЯ_ФАЙЛА_БЕЗ_РАСШИРЕНИЯ">…</script>
, где
ТИП_СОДЕРЖИМОГО
зависит от конкретного фреймворка (например,text/html
для KnockoutJS илиtext/ng-template
для AngularJS).Bundle Transformer производит только трансформации (классы
StyleTransformer
иScriptTransformer
– это просто реализации интерфейсаSystem.Web.Optimization.IBundleTransform
), всю остальную работу, за исключением отладочных HTTP-хэндлеров, делает System.Web.Optimization (он же Microsoft ASP.NET Web Optimization Framework).В документирующих тегах
<reference>
также производится преобразование относительных путей в абсолютные:Если бы все было настолько легко и просто, то поддержка генерации
.map
-файлов уже давно появилась бы в аналогичных продуктах (например, Cassette и SquishIt).Лучше сравните с ними Web Essentials и Chirpy.
.map
-файлов не будет. Перечислю основные проблемы:Нужно понимать, что при первоначальной обработке каждого бандла (например, минимизации) расходуются ресурсы процессора и память. Кроме того, код обработанных бандлов кэшируется в памяти веб-сервера. Таким образом, при использовании вашего подхода возникает лишняя нагрузка на сервер.
Классические подходы позволяют более эффективно использовать серверный и браузерный кэш. Если они не подходят вам, то используйте RequireJS.
bootstrap.css
даже с включенной опцией--allow-unrecognized-functions
).Например, Stack Overflow Careers 2.0 поддерживает интеграцию со всеми перечисленными сервисами.
Просто я оценивал CSSO с точки зрения опыта работы с другими CSS-минимизаторами, в которых не реализована структурная минимизация. К сожалению, пока CSSO не с чем сравнить, т.к. WebGrease Semantic CSS Minifier по-прежнему содержит ошибки.