SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
ASP.NET


  Bundle Transformer –
  инструмент для клиентской оптимизации в среде ASP.NET



АНДРЕЙ ТАРИЦЫН
Веб-разработчик
taritsyn@gmail.com
www.taritsyn.ru



MoscowJS 8th, 2 ноября 2012 года
Что такое Bundle Transformer?


Bundle Transformer – это модульное расширение для Microsoft ASP.NET
Web Optimization Framework.
Исходный код Bundle Transformer распространяется под Open Source-
лицензией Apache License 2.0 и его можно загрузить с CodePlex -
http://bundletransformer.codeplex.com.
Для установки Bundle Transformer следует использовать пакетный
менеджер NuGet (http://nuget.org).
Краткий обзор возможностей
Microsoft ASP.NET Web        ASP.NET
Optimization Framework
ASP.NET   Проект Web Optimization


Microsoft ASP.NET Web Optimization Framework – это библиотека,
позволяющая автоматизировать клиентскую оптимизацию в ASP.NET-
приложениях.
Данный продукт также известен под следующими названиями:
• ASP.NET Bundling and Minification
• System.Web.Optimization
• Microsoft.Web.Optimization
• ASP.NET Optimization – Bundling
ASP.NET   Основные возможности


1. Применяет различные трансформации к таблицам стилей и
   скриптам. По умолчанию производится только минимизация кода
   (позволяет сократить размер CSS- и JS-файлов).
2. Объединяет код файлов (позволяет сократить количество HTTP-
   запросов).
3. Производит кэширование обработанного кода в памяти сервера и
   кэше браузера, а также управляет устареванием обоих типов кэша.
4. Поддерживает возможность размещения файлов на CDN.
ASP.NET   Поддерживаемые ASP.NET-фреймворки


Продукт написан под .NET Framework 4.0 и поддерживает следующие
ASP.NET-фреймворки:
1. ASP.NET MVC 3 и 4
2. ASP.NET Web Forms 4 и 4.5
3. ASP.NET Web Pages (в качестве среды разработки можно
   использовать WebMatrix)
ASP.NET      Создание bundle`ов


Создавать bundle`ы следует в файле _AppStart.cshtml:
@using System.Web.Optimization;

@{
     var bundles = BundleTable.Bundles;
     var cssTransformer = new CssMinify();
     var jsTransformer = new JsMinify();

     var commonStylesBundle = new Bundle("~/Bundles/CommonStyles");
     commonStylesBundle.Include("~/Content/Site.css",
         …);
     commonStylesBundle.Transforms.Add(cssTransformer);
     bundles.Add(commonStylesBundle);

     var modernizrBundle = new Bundle("~/Bundles/Modernizr");
     modernizrBundle.Include("~/Scripts/modernizr-2.*");
     modernizrBundle.Transforms.Add(jsTransformer);
     bundles.Add(modernizrBundle);

     var commonScriptsBundle = new Bundle("~/Bundles/CommonScripts");
     commonScriptsBundle.Include("~/Scripts/MicrosoftAjax.js",
         "~/Scripts/jquery-{version}.js",
         …
         "~/Scripts/knockout-2.*");
     commonScriptsBundle.Transforms.Add(jsTransformer);
     bundles.Add(commonScriptsBundle);
     …
ASP.NET   Регистрация bundle`ов в представлениях


Пример регистрации bundle`ов в файле _SiteLayout.cshtml:
@using System.Web.Optimization;

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>@Page.Title - My ASP.NET Web Page</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        @Styles.Render("~/Bundles/CommonStyles")
        @Scripts.Render("~/Bundles/Modernizr")
        …
    </head>
    <body>
        …
        @Scripts.Render("~/Bundles/CommonScripts")
        @RenderSection("Scripts", required: false)
    </body>
</html>
ASP.NET   Режимы работы


Режим, в котором находится веб-приложение, определяется на основе
следующих настроек:
1. Значения атрибута debug элемента compilation из файла
   Web.config (true – режим отладки; false – режим выпуска).
2. Значения свойства BundleTable.EnableOptimizations,
   которое можно указать в файле _AppStart.cshtml (true –
   режим выпуска; false – режим отладки). Причем значение
   свойства BundleTable.EnableOptimizations имеет приоритет
   над настройками из файла Web.config.
ASP.NET   HTML-разметка в режиме отладки


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Home Page - My ASP.NET Web Page</title>
        <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        …
        <link href="/Content/themes/base/jquery.ui.dialog.css" rel="stylesheet"/>
        <link href="/Content/Site.css" rel="stylesheet"/>
        …
        <script src="/Scripts/modernizr-2.5.3.js"></script>
        …
    </head>
    <body>
        …
        <script src="/Scripts/jquery-1.7.1.js"></script>
        …
        <script src="/Scripts/MicrosoftAjax.debug.js"></script>
        <script src="/Scripts/knockout-2.1.0.debug.js"></script>
    </body>
</html>
ASP.NET   HTML-разметка в режиме выпуска


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Home Page - My ASP.NET Web Page</title>
        <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        <link
            href="/Bundles/CommonStyles?v=acdfDqHyvHEi8pqLV2fVSTlljje-0RsWq4OO3F23tkQ1"
            rel="stylesheet"/>
        <script
            src="/Bundles/Modernizr?v=jmdBhqkI3eMaPZJduAyIYBj7MpXrGd2ZqmHAOSNeYcg1">
</script>
        …
    </head>
    <body>
        …
        <script
            src="/Bundles/CommonScripts?v=oqT9IP1UU3zHqteyKfYQBTl5GRXqr3I-YZ4xPZW6taE1">
</script>
    </body>
</html>
Обзор основных возможностей
ядра Bundle Transformer
Устраняемые недостатки


Bundle Transformer позволяет устранить некоторые недостатки
Microsoft ASP.NET Web Optimization Framework:
1. Удаляет из bundle`а дублирующиеся файлы.
2. Правильно обрабатывает JS-файлы, имеющие расширения в
   Microsoft`овском стиле (*.debug.js).
3. Предотвращает повторную минимизацию предварительно
   минимизированных файлов (файлы с расширениями *.min.css и
   *.min.js, а также JS-файлы с расширениями в Microsoft`овском
   стиле).
4. Преобразует относительные пути в CSS-коде в абсолютные.
5. Позволяет сохранить в объединенном коде порядок файлов,
   заданный при создании bundle`а (с помощью класса NullOrderer).
Дополнительные возможности


При использовании Microsoft ASP.NET Web Optimization Framework
вместе с Bundle Transformer появляются следующие дополнительные
возможности:
1. Можно выбрать наиболее подходящий алгоритм минимизации,
   если установить соответствующий модуль-минимизатор.
2. Доступны модули-трансляторы, которые компилируют код на
   промежуточных языках (LESS, Sass, SCSS, CoffeeScript и TypeScript) в
   CSS или JavaScript.
3. При установке модулей-трансляторов также устанавливаются HTTP-
   хэндлеры, которые обрабатывают HTTP-запросы к файлам с
   соответствующими расширениями (*.less, *.sass, *.scss,
   *.coffee и *.ts).
Подключение Bundle Transformer


@using System.Web.Optimization;
@using BundleTransformer.Core.Orderers;
@using BundleTransformer.Core.Transformers;

@{
     var   bundles = BundleTable.Bundles;
     var   cssTransformer = new CssTransformer();
     var   jsTransformer = new JsTransformer();
     var   nullOrderer = new NullOrderer();

     var commonStylesBundle = new Bundle("~/Bundles/CommonStyles");
     commonStylesBundle.Include("~/Content/Site.css",
         …);
     commonStylesBundle.Transforms.Add(cssTransformer);
     commonStylesBundle.Orderer = nullOrderer;
     bundles.Add(commonStylesBundle);

     var modernizrBundle = new Bundle("~/Bundles/Modernizr");
     modernizrBundle.Include("~/Scripts/modernizr-2.*");
     modernizrBundle.Transforms.Add(jsTransformer);
     modernizrBundle.Orderer = nullOrderer;
     bundles.Add(modernizrBundle);

     var commonScriptsBundle = new Bundle("~/Bundles/CommonScripts");
     commonScriptsBundle.Include("~/Scripts/MicrosoftAjax.js",
         …);
     commonScriptsBundle.Transforms.Add(jsTransformer);
     commonScriptsBundle.Orderer = nullOrderer;
     bundles.Add(commonScriptsBundle);
     …
Модули-минимизаторы
JSMin   Bundle Transformer: JSMin


Содержит адаптер-минимизатор JS-кода – CrockfordJsMinifier, созданный на
базе C#-порта JSMin.

Основная информация о JSMin
Разработчик: Douglas Crockford
Сайт: http://www.crockford.com/javascript/jsmin.html
Изначально написан на: C
Особенности:
1. Удаляются лишние пробельные символы.
2. Удаляются комментарии.
3. Могут возникать ошибки, если в коде содержатся сложные регулярные
    выражения.
Packer   Bundle Transformer: Packer


Содержит адаптер-минимизатор JS-кода – EdwardsJsMinifier, созданный на
базе Packer 3.0.

Основная информация о Packer
Разработчик: Dean Edwards
Сайт: http://dean.edwards.name/packer/
Написан на: JavaScript (браузер)
Особенности :
1. Производит простейшую минимизацию как JSMin.
2. Поддерживает замену имен параметров и локальных переменных на более
   короткие (обфускация).
3. Поддерживает архивацию кода с помощью алгоритма Base62
   (рекомендуется использовать, как замену GZIP/Deflate-сжатия).
YUI   Bundle Transformer: YUI


Содержит 2 адаптера-минимизатора на базе .NET-порта YUI Compressor
(http://yuicompressor.codeplex.com):
1. YuiCssMinifier. Минимизирует CSS-код.
2. YuiJsMinifier. Минимизирует JS-код.

Основная информация об YUI Compressor
Разработчик: компания Yahoo!
Сайт: http://developer.yahoo.com/yui/compressor/
Изначально написан на: Java
Особенности:
1. Производит простейшую минимизацию CSS- и JS-кода.
2. Поддерживает обфускацию JS-кода.
3. Производит оптимизацию кода (заменяет инструкции на более короткие
    эквиваленты, объединяет несколько JS-инструкций в одну и т.д.).
MS Ajax   Bundle Transformer: Microsoft Ajax


Содержит 2 адаптера-минимизатора на базе Microsoft Ajax Minifier:
1. MicrosoftAjaxCssMinifier. Минимизирует CSS-код.
2. MicrosoftAjaxJsMinifier. Минимизирует JS-код.

Основная информация о Microsoft Ajax Minifier
Разработчик: компания Microsoft
Сайт: http://ajaxmin.codeplex.com
Написан на: .NET
Особенности:
1. По многим показателям похож на YUI Compressor.
2. Может обнаруживать и удалять неиспользуемый JS-код.
3. Обладает очень большим количеством настроек, которые позволяют
    тонко настроить алгоритм минимизации.
4. Последние версии Microsoft Ajax Minifier немного превосходят по степени
    сжатия YUI Compressor.
UglifyJS   Bundle Transformer: UglifyJS


Содержит адаптер-минимизатор JS-кода - UglifyJsMinifier, созданный на базе
1-й версии UglifyJS.

Основная информация об UglifyJS
Разработчик: Mihai Bazon
Сайт: http://github.com/mishoo/UglifyJS
Написан на: JavaScript (Node.js)
Особенности: по многим показателям похож на JS-минимизатор из Microsoft
Ajax Minifier, но обладает более высокой степенью сжатия.
Closure   Bundle Transformer: Closure


Содержит 2 адаптера-минимизатора JS-кода на базе Closure Compiler:
1. ClosureRemoteJsMinifier. Использует веб-сервис.
2. ClosureLocalJsMinifier. Использует консольное Java-приложение.

Основная информация о Closure Compiler
Разработчик: компания Google
Сайт: http://developers.google.com/closure/compiler/
Написан на: Java
Особенности: поддерживает 3 режима минимизации:
1. Whitespace only. Работает как JSMin.
2. Simple optimizations. Напоминает UglifyJS и JS-минимизатор из Microsoft
    Ajax Minifier.
3. Advanced optimizations. Производит компиляцию JS-кода (полностью
    изменяет структуру скрипта). Для корректной работы требует объявления
    extern`ов.
CSSO   Bundle Transformer: CSSO


Содержит адаптер-минимизатор CSS-кода - KryzhanovskyCssMinifier,
созданный на базе CSSO (CSS Optimizer).

Основная информация о CSSO
Разработчик: компания Яндекс (Сергей Крыжановский и Виталий Харисов)
Сайт: http://github.com/css/csso
Написан на: JavaScript (Node.js и браузер)
Особенности:
1. Производит традиционную минимизацию CSS-кода в стиле YUI
    Compressor.
2. Поддерживает структурную минимизацию CSS-кода (слияние блоков с
    одинаковыми селекторами, слияние блоков с одинаковыми свойствами,
    удаление перекрываемых свойств, удаление повторяющихся селекторов,
    частичное слияние блоков, частичное разделение блоков, удаление
    пустых ruleset и at-rule, минимизация margin/padding и т.д.).
WG     Bundle Transformer: WebGrease


Содержит адаптер-минимизатор CSS-кода - WgCssMinifier, созданный на базе
семантического CSS-минимизатора WebGrease.

Основная информация о WebGrease
Разработчик: компания MSN (подразделение Microsoft)
Сайт: http://nuget.org/packages/WebGrease
Написан на: .NET
Особенности:
1. Создан на базе CSS-минимизатора Microsoft Ajax Minifier.
2. Также, как и CSSO, производит структурную минимизацию кода.
3. Текущая версия 1.3.0 все еще содержит ошибки.
Модули-трансляторы
Sass.   Bundle Transformer: Sass and SCSS


Содержит адаптер-транслятор SassAndScssTranslator, производящий
трансляцию Sass- и SCSS-кода в CSS. Создан на основе исходного кода .NET-
библиотеки SassAndCoffee.Ruby (http://github.com/xpaulbettsx/SassAndCoffee).

Основная информация о компиляторе Sass
Разработчики: Nathan Weizenbaum, Chris Eppstein, Hampton Catlin
Сайт: http://sass-lang.com
Изначально написан на: Ruby
Особенности:
1. Поддерживает 2 типа синтаксиса динамических таблиц стилей: Sass и SCSS.
2. Sass имеет Haml-подобный синтаксис.
3. SCSS является надмножеством CSS. Любой CSS-код является валидным
   SCSS-кодом.
4. Позволяет использовать при написании таблиц стилей: переменные,
   вложенные селекторы, примеси, наследование селекторов и т.д.
{less}   Bundle Transformer: LESS


Содержит адаптер-транслятор LessTranslator, который транслирует LESS-код в
CSS, средствами .NET-библиотеки dotless (http://www.dotlesscss.org).

Основная информация о компиляторе LESS
Разработчик: Alexis Sellier
Сайт: http://lesscss.org
Изначально написан на: JavaScript (Node.js, Rhino и браузер)
Особенности:
1. LESS является надмножеством CSS. Любой CSS-код является валидным
   LESS-кодом.
2. Позволяет использовать при написании таблиц стилей: переменные,
   вложенные селекторы, примеси, операции (сложение, вычитание,
   умножение и деление), функции (математические и цветовые),
   пространства имен и т.д.
Lite
 {less}     Bundle Transformer: LESS Lite


Содержит адаптер-транслятор LessTranslator, который транслирует LESS-код в
CSS, средствами .NET-библиотеки DotlessClientOnly
(http://nuget.org/packages/DotlessClientOnly).

Особенности реализации
1. Использует для компиляции LESS-кода более легковесную библиотеку
   (содержит только компилятор).
2. С точки зрения Bundle Transformer функционал BundleTransformer.LessLite
   полностью эквивалентен BundleTransformer.Less.
Bundle Transformer: CoffeeScript


Содержит адаптер-транслятор CoffeeScriptTranslator, производящий
трансляцию CoffeeScript-кода в JavaScript:

Основная информация о компиляторе CoffeeScript
Разработчик: Jeremy Ashkenas
Сайт: http://coffeescript.org
Написан на: JavaScript (Node.js и браузер)
Особенности:
1. CoffeeScript добавляет синтаксический сахар в стиле Ruby, Python и Haskell ,
   что позволяет улучшить читаемость кода и уменьшить его размер.
2. Поддерживает классы и наследование.
TS    Bundle Transformer: TypeScript


Содержит адаптер-транслятор TypeScriptTranslator, производящий
трансляцию TypeScript-кода в JavaScript:

Основная информация о компиляторе TypeScript
Разработчик: компания Microsoft (Anders Hejlsberg)
Сайт: http://www.typescriptlang.org
Написан на: JavaScript (Node.js и браузер)
Особенности:
1. TypeScript является надмножеством JavaScript. Любой JavaScript-код
   является валидным TypeScript-кодом. Если CoffeeScript можно назвать
   скриптовым Sass, то TypeScript – это скриптовый LESS.
2. Поддерживает статическую типизацию.
3. Поддерживает интерфейсы, классы и модули.
Подключение модулей
Декларативное подключение


Декларативное подключение модулей производится с помощью файла
Web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd">
        <core>
            <css defaultMinifier="KryzhanovskyCssMinifier">
                <minifiers>
                    …
                    <add name="KryzhanovskyCssMinifier" type="…" />
                </minifiers>
                <translators>
                    …
                    <add name="LessTranslator" type="…" enabled="true" />
                </translators>
            </css>
            <js defaultMinifier="ClosureRemoteJsMinifier">
                <minifiers>
                    …
                    <add name="ClosureRemoteJsMinifier" type="…" />
                </minifiers>
                <translators>
                    …
                    <add name="TypeScriptTranslator" type="…" enabled="true" />
                    …
Императивное подключение


Императивное подключение модулей производится при создании bundle`ов в
файле _AppStart.cshtml:
Демонстрационный сайт
Пример сайта ASP.NET Web Pages


По адресу http://bundletransformer.codeplex.com/releases/view/96306 можно
скачать архив с примером сайта ASP.NET Web Pages, использующего Bundle
Transformer (установлены все модули, кроме BundleTransformer.WG):
Ссылки


• http://bundletransformer.codeplex.com – страница проекта Bundle Transformer
  на CodePlex
• http://github.com/Taritsyn/MsieJavaScriptEngine - страница проекта MSIE JS
  Engine (использую для запуска под .NET кода следующих JS-библиотек:
  Packer, UglifyJS, CoffeeScript и TypeScript) на GitHub
• www.taritsyn.ru – мой блог
• http://aspnetoptimization.codeplex.com – страница проекта Microsoft ASP.NET
  Web Optimization Framework на CodePlex
• http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification - учебник
  по Microsoft ASP.NET Web Optimization Framework
• http://codebetter.com/howarddierking/ - блог Howard Dierking (руководитель
  проекта Web Optimization)
• http://www.microsoft.com/Web/webmatrix/ - сайт среды разработки
  WebMatrix
• http://www.asp.net/web-pages - материалы по ASP.NET Web Pages
Спасибо за внимание!




АНДРЕЙ ТАРИЦЫН
Email: taritsyn@gmail.com
Сайт: www.taritsyn.ru
Twitter: http://twitter.com/taritsyn

Weitere ähnliche Inhalte

Was ist angesagt?

Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)Mikhail Davydov
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NETVitaly Baum
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов2ГИС Технологии
 
инструментарий
инструментарийинструментарий
инструментарийigdweb
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011camp_drupal_ua
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Vladimir Malyk
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Yandex
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливееYaroslav Serhieiev
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаОлена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаLEDC 2016
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4rit2011
 

Was ist angesagt? (20)

Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
инструментарий
инструментарийинструментарий
инструментарий
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
non-blocking java script
non-blocking java scriptnon-blocking java script
non-blocking java script
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Как Webpack сделал меня счастливее
Как Webpack сделал меня счастливееКак Webpack сделал меня счастливее
Как Webpack сделал меня счастливее
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаОлена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
 
Backbone lesson 1
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
 
Backbone js
Backbone jsBackbone js
Backbone js
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
 

Andere mochten auch

Therainforestgsh280412 120615043444-phpapp01
Therainforestgsh280412 120615043444-phpapp01Therainforestgsh280412 120615043444-phpapp01
Therainforestgsh280412 120615043444-phpapp01Territorial Prealpe
 
Science water[1]
Science water[1]Science water[1]
Science water[1]Loscos7
 
Present continuous
Present continuousPresent continuous
Present continuousLoscos7
 
Sécuriser votre site web azure, c’est simple maintenant !
Sécuriser votre site web azure, c’est simple maintenant !Sécuriser votre site web azure, c’est simple maintenant !
Sécuriser votre site web azure, c’est simple maintenant !Estelle Auberix
 
In, on, at
In, on, atIn, on, at
In, on, atLoscos7
 
Avaluació inicial Vero
Avaluació inicial VeroAvaluació inicial Vero
Avaluació inicial VeroLoscos7
 
Prest. simple and continuous
Prest. simple and continuousPrest. simple and continuous
Prest. simple and continuousLoscos7
 
Los mas grándes del mundo del stencil
Los mas grándes del mundo del stencilLos mas grándes del mundo del stencil
Los mas grándes del mundo del stenciljordan torres benitez
 
Silver Lining Research Presentation
Silver Lining Research PresentationSilver Lining Research Presentation
Silver Lining Research PresentationAlex Bennett
 
Present simple
Present simplePresent simple
Present simpleLoscos7
 
The water cycle didactic unit
The water cycle didactic unitThe water cycle didactic unit
The water cycle didactic unitLoscos7
 
Presentation on cross culture joiya
Presentation on cross culture   joiyaPresentation on cross culture   joiya
Presentation on cross culture joiyaSonu Nohria
 
La Sécurité dans Azure
La Sécurité dans AzureLa Sécurité dans Azure
La Sécurité dans AzureEstelle Auberix
 
Landforms and bodies of water
Landforms and bodies of waterLandforms and bodies of water
Landforms and bodies of waterJoGono
 

Andere mochten auch (16)

Therainforestgsh280412 120615043444-phpapp01
Therainforestgsh280412 120615043444-phpapp01Therainforestgsh280412 120615043444-phpapp01
Therainforestgsh280412 120615043444-phpapp01
 
Science water[1]
Science water[1]Science water[1]
Science water[1]
 
Present continuous
Present continuousPresent continuous
Present continuous
 
Sécuriser votre site web azure, c’est simple maintenant !
Sécuriser votre site web azure, c’est simple maintenant !Sécuriser votre site web azure, c’est simple maintenant !
Sécuriser votre site web azure, c’est simple maintenant !
 
In, on, at
In, on, atIn, on, at
In, on, at
 
Avaluació inicial Vero
Avaluació inicial VeroAvaluació inicial Vero
Avaluació inicial Vero
 
Prest. simple and continuous
Prest. simple and continuousPrest. simple and continuous
Prest. simple and continuous
 
Los mas grándes del mundo del stencil
Los mas grándes del mundo del stencilLos mas grándes del mundo del stencil
Los mas grándes del mundo del stencil
 
Presentation wilfredo a. pagarigan jr
Presentation wilfredo a. pagarigan jrPresentation wilfredo a. pagarigan jr
Presentation wilfredo a. pagarigan jr
 
Silver Lining Research Presentation
Silver Lining Research PresentationSilver Lining Research Presentation
Silver Lining Research Presentation
 
Present simple
Present simplePresent simple
Present simple
 
CHINA CONNECTION-ROGER J. CHENG-ASRC-UALBANY-final
CHINA CONNECTION-ROGER J. CHENG-ASRC-UALBANY-finalCHINA CONNECTION-ROGER J. CHENG-ASRC-UALBANY-final
CHINA CONNECTION-ROGER J. CHENG-ASRC-UALBANY-final
 
The water cycle didactic unit
The water cycle didactic unitThe water cycle didactic unit
The water cycle didactic unit
 
Presentation on cross culture joiya
Presentation on cross culture   joiyaPresentation on cross culture   joiya
Presentation on cross culture joiya
 
La Sécurité dans Azure
La Sécurité dans AzureLa Sécurité dans Azure
La Sécurité dans Azure
 
Landforms and bodies of water
Landforms and bodies of waterLandforms and bodies of water
Landforms and bodies of water
 

Ähnlich wie Презентация «Bundle Transformer – инструмент для клиентской оптимизации в среде ASP.NET» с MoscowJS 8th

C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.Igor Shkulipa
 
Trening modul2-webinar11
Trening modul2-webinar11Trening modul2-webinar11
Trening modul2-webinar11olgaoov
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеYandex
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_rumcroitor
 
идеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинидеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинdrupalconf
 
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Andrey Taritsyn
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Igor Sazonov
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени. beshkenadze
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5Dima Dzuba
 
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...Омские ИТ-субботники
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиковMedia Gorod
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Artur Baranok
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 

Ähnlich wie Презентация «Bundle Transformer – инструмент для клиентской оптимизации в среде ASP.NET» с MoscowJS 8th (20)

C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 
Trening modul2-webinar11
Trening modul2-webinar11Trening modul2-webinar11
Trening modul2-webinar11
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
Yulia tsuba
Yulia tsubaYulia tsuba
Yulia tsuba
 
идеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихинидеология Drupal 8 уже в drupal 7 вячеслав касихин
идеология Drupal 8 уже в drupal 7 вячеслав касихин
 
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
Презентация «WebMarkupMin – HTML-минификатор для платформы .NET» с MskDotNet ...
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
 
Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5МАИ, Сети ЭВМ, Лекция №5
МАИ, Сети ЭВМ, Лекция №5
 
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
2015-11-07 01 Виталий Кравцов. Webpack: человеческий подход к разработке веб ...
 
битрикс Framework сергей рыжиков
битрикс Framework   сергей рыжиковбитрикс Framework   сергей рыжиков
битрикс Framework сергей рыжиков
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...Новые возможности развертывания и масштабирования open source приложений в Az...
Новые возможности развертывания и масштабирования open source приложений в Az...
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 

Презентация «Bundle Transformer – инструмент для клиентской оптимизации в среде ASP.NET» с MoscowJS 8th

  • 1. ASP.NET Bundle Transformer – инструмент для клиентской оптимизации в среде ASP.NET АНДРЕЙ ТАРИЦЫН Веб-разработчик taritsyn@gmail.com www.taritsyn.ru MoscowJS 8th, 2 ноября 2012 года
  • 2. Что такое Bundle Transformer? Bundle Transformer – это модульное расширение для Microsoft ASP.NET Web Optimization Framework. Исходный код Bundle Transformer распространяется под Open Source- лицензией Apache License 2.0 и его можно загрузить с CodePlex - http://bundletransformer.codeplex.com. Для установки Bundle Transformer следует использовать пакетный менеджер NuGet (http://nuget.org).
  • 3. Краткий обзор возможностей Microsoft ASP.NET Web ASP.NET Optimization Framework
  • 4. ASP.NET Проект Web Optimization Microsoft ASP.NET Web Optimization Framework – это библиотека, позволяющая автоматизировать клиентскую оптимизацию в ASP.NET- приложениях. Данный продукт также известен под следующими названиями: • ASP.NET Bundling and Minification • System.Web.Optimization • Microsoft.Web.Optimization • ASP.NET Optimization – Bundling
  • 5. ASP.NET Основные возможности 1. Применяет различные трансформации к таблицам стилей и скриптам. По умолчанию производится только минимизация кода (позволяет сократить размер CSS- и JS-файлов). 2. Объединяет код файлов (позволяет сократить количество HTTP- запросов). 3. Производит кэширование обработанного кода в памяти сервера и кэше браузера, а также управляет устареванием обоих типов кэша. 4. Поддерживает возможность размещения файлов на CDN.
  • 6. ASP.NET Поддерживаемые ASP.NET-фреймворки Продукт написан под .NET Framework 4.0 и поддерживает следующие ASP.NET-фреймворки: 1. ASP.NET MVC 3 и 4 2. ASP.NET Web Forms 4 и 4.5 3. ASP.NET Web Pages (в качестве среды разработки можно использовать WebMatrix)
  • 7. ASP.NET Создание bundle`ов Создавать bundle`ы следует в файле _AppStart.cshtml: @using System.Web.Optimization; @{ var bundles = BundleTable.Bundles; var cssTransformer = new CssMinify(); var jsTransformer = new JsMinify(); var commonStylesBundle = new Bundle("~/Bundles/CommonStyles"); commonStylesBundle.Include("~/Content/Site.css", …); commonStylesBundle.Transforms.Add(cssTransformer); bundles.Add(commonStylesBundle); var modernizrBundle = new Bundle("~/Bundles/Modernizr"); modernizrBundle.Include("~/Scripts/modernizr-2.*"); modernizrBundle.Transforms.Add(jsTransformer); bundles.Add(modernizrBundle); var commonScriptsBundle = new Bundle("~/Bundles/CommonScripts"); commonScriptsBundle.Include("~/Scripts/MicrosoftAjax.js", "~/Scripts/jquery-{version}.js", … "~/Scripts/knockout-2.*"); commonScriptsBundle.Transforms.Add(jsTransformer); bundles.Add(commonScriptsBundle); …
  • 8. ASP.NET Регистрация bundle`ов в представлениях Пример регистрации bundle`ов в файле _SiteLayout.cshtml: @using System.Web.Optimization; <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>@Page.Title - My ASP.NET Web Page</title> <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> <meta name="viewport" content="width=device-width" /> @Styles.Render("~/Bundles/CommonStyles") @Scripts.Render("~/Bundles/Modernizr") … </head> <body> … @Scripts.Render("~/Bundles/CommonScripts") @RenderSection("Scripts", required: false) </body> </html>
  • 9. ASP.NET Режимы работы Режим, в котором находится веб-приложение, определяется на основе следующих настроек: 1. Значения атрибута debug элемента compilation из файла Web.config (true – режим отладки; false – режим выпуска). 2. Значения свойства BundleTable.EnableOptimizations, которое можно указать в файле _AppStart.cshtml (true – режим выпуска; false – режим отладки). Причем значение свойства BundleTable.EnableOptimizations имеет приоритет над настройками из файла Web.config.
  • 10. ASP.NET HTML-разметка в режиме отладки <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Home Page - My ASP.NET Web Page</title> <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" /> <meta name="viewport" content="width=device-width" /> … <link href="/Content/themes/base/jquery.ui.dialog.css" rel="stylesheet"/> <link href="/Content/Site.css" rel="stylesheet"/> … <script src="/Scripts/modernizr-2.5.3.js"></script> … </head> <body> … <script src="/Scripts/jquery-1.7.1.js"></script> … <script src="/Scripts/MicrosoftAjax.debug.js"></script> <script src="/Scripts/knockout-2.1.0.debug.js"></script> </body> </html>
  • 11. ASP.NET HTML-разметка в режиме выпуска <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Home Page - My ASP.NET Web Page</title> <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" /> <meta name="viewport" content="width=device-width" /> <link href="/Bundles/CommonStyles?v=acdfDqHyvHEi8pqLV2fVSTlljje-0RsWq4OO3F23tkQ1" rel="stylesheet"/> <script src="/Bundles/Modernizr?v=jmdBhqkI3eMaPZJduAyIYBj7MpXrGd2ZqmHAOSNeYcg1"> </script> … </head> <body> … <script src="/Bundles/CommonScripts?v=oqT9IP1UU3zHqteyKfYQBTl5GRXqr3I-YZ4xPZW6taE1"> </script> </body> </html>
  • 13. Устраняемые недостатки Bundle Transformer позволяет устранить некоторые недостатки Microsoft ASP.NET Web Optimization Framework: 1. Удаляет из bundle`а дублирующиеся файлы. 2. Правильно обрабатывает JS-файлы, имеющие расширения в Microsoft`овском стиле (*.debug.js). 3. Предотвращает повторную минимизацию предварительно минимизированных файлов (файлы с расширениями *.min.css и *.min.js, а также JS-файлы с расширениями в Microsoft`овском стиле). 4. Преобразует относительные пути в CSS-коде в абсолютные. 5. Позволяет сохранить в объединенном коде порядок файлов, заданный при создании bundle`а (с помощью класса NullOrderer).
  • 14. Дополнительные возможности При использовании Microsoft ASP.NET Web Optimization Framework вместе с Bundle Transformer появляются следующие дополнительные возможности: 1. Можно выбрать наиболее подходящий алгоритм минимизации, если установить соответствующий модуль-минимизатор. 2. Доступны модули-трансляторы, которые компилируют код на промежуточных языках (LESS, Sass, SCSS, CoffeeScript и TypeScript) в CSS или JavaScript. 3. При установке модулей-трансляторов также устанавливаются HTTP- хэндлеры, которые обрабатывают HTTP-запросы к файлам с соответствующими расширениями (*.less, *.sass, *.scss, *.coffee и *.ts).
  • 15. Подключение Bundle Transformer @using System.Web.Optimization; @using BundleTransformer.Core.Orderers; @using BundleTransformer.Core.Transformers; @{ var bundles = BundleTable.Bundles; var cssTransformer = new CssTransformer(); var jsTransformer = new JsTransformer(); var nullOrderer = new NullOrderer(); var commonStylesBundle = new Bundle("~/Bundles/CommonStyles"); commonStylesBundle.Include("~/Content/Site.css", …); commonStylesBundle.Transforms.Add(cssTransformer); commonStylesBundle.Orderer = nullOrderer; bundles.Add(commonStylesBundle); var modernizrBundle = new Bundle("~/Bundles/Modernizr"); modernizrBundle.Include("~/Scripts/modernizr-2.*"); modernizrBundle.Transforms.Add(jsTransformer); modernizrBundle.Orderer = nullOrderer; bundles.Add(modernizrBundle); var commonScriptsBundle = new Bundle("~/Bundles/CommonScripts"); commonScriptsBundle.Include("~/Scripts/MicrosoftAjax.js", …); commonScriptsBundle.Transforms.Add(jsTransformer); commonScriptsBundle.Orderer = nullOrderer; bundles.Add(commonScriptsBundle); …
  • 17. JSMin Bundle Transformer: JSMin Содержит адаптер-минимизатор JS-кода – CrockfordJsMinifier, созданный на базе C#-порта JSMin. Основная информация о JSMin Разработчик: Douglas Crockford Сайт: http://www.crockford.com/javascript/jsmin.html Изначально написан на: C Особенности: 1. Удаляются лишние пробельные символы. 2. Удаляются комментарии. 3. Могут возникать ошибки, если в коде содержатся сложные регулярные выражения.
  • 18. Packer Bundle Transformer: Packer Содержит адаптер-минимизатор JS-кода – EdwardsJsMinifier, созданный на базе Packer 3.0. Основная информация о Packer Разработчик: Dean Edwards Сайт: http://dean.edwards.name/packer/ Написан на: JavaScript (браузер) Особенности : 1. Производит простейшую минимизацию как JSMin. 2. Поддерживает замену имен параметров и локальных переменных на более короткие (обфускация). 3. Поддерживает архивацию кода с помощью алгоритма Base62 (рекомендуется использовать, как замену GZIP/Deflate-сжатия).
  • 19. YUI Bundle Transformer: YUI Содержит 2 адаптера-минимизатора на базе .NET-порта YUI Compressor (http://yuicompressor.codeplex.com): 1. YuiCssMinifier. Минимизирует CSS-код. 2. YuiJsMinifier. Минимизирует JS-код. Основная информация об YUI Compressor Разработчик: компания Yahoo! Сайт: http://developer.yahoo.com/yui/compressor/ Изначально написан на: Java Особенности: 1. Производит простейшую минимизацию CSS- и JS-кода. 2. Поддерживает обфускацию JS-кода. 3. Производит оптимизацию кода (заменяет инструкции на более короткие эквиваленты, объединяет несколько JS-инструкций в одну и т.д.).
  • 20. MS Ajax Bundle Transformer: Microsoft Ajax Содержит 2 адаптера-минимизатора на базе Microsoft Ajax Minifier: 1. MicrosoftAjaxCssMinifier. Минимизирует CSS-код. 2. MicrosoftAjaxJsMinifier. Минимизирует JS-код. Основная информация о Microsoft Ajax Minifier Разработчик: компания Microsoft Сайт: http://ajaxmin.codeplex.com Написан на: .NET Особенности: 1. По многим показателям похож на YUI Compressor. 2. Может обнаруживать и удалять неиспользуемый JS-код. 3. Обладает очень большим количеством настроек, которые позволяют тонко настроить алгоритм минимизации. 4. Последние версии Microsoft Ajax Minifier немного превосходят по степени сжатия YUI Compressor.
  • 21. UglifyJS Bundle Transformer: UglifyJS Содержит адаптер-минимизатор JS-кода - UglifyJsMinifier, созданный на базе 1-й версии UglifyJS. Основная информация об UglifyJS Разработчик: Mihai Bazon Сайт: http://github.com/mishoo/UglifyJS Написан на: JavaScript (Node.js) Особенности: по многим показателям похож на JS-минимизатор из Microsoft Ajax Minifier, но обладает более высокой степенью сжатия.
  • 22. Closure Bundle Transformer: Closure Содержит 2 адаптера-минимизатора JS-кода на базе Closure Compiler: 1. ClosureRemoteJsMinifier. Использует веб-сервис. 2. ClosureLocalJsMinifier. Использует консольное Java-приложение. Основная информация о Closure Compiler Разработчик: компания Google Сайт: http://developers.google.com/closure/compiler/ Написан на: Java Особенности: поддерживает 3 режима минимизации: 1. Whitespace only. Работает как JSMin. 2. Simple optimizations. Напоминает UglifyJS и JS-минимизатор из Microsoft Ajax Minifier. 3. Advanced optimizations. Производит компиляцию JS-кода (полностью изменяет структуру скрипта). Для корректной работы требует объявления extern`ов.
  • 23. CSSO Bundle Transformer: CSSO Содержит адаптер-минимизатор CSS-кода - KryzhanovskyCssMinifier, созданный на базе CSSO (CSS Optimizer). Основная информация о CSSO Разработчик: компания Яндекс (Сергей Крыжановский и Виталий Харисов) Сайт: http://github.com/css/csso Написан на: JavaScript (Node.js и браузер) Особенности: 1. Производит традиционную минимизацию CSS-кода в стиле YUI Compressor. 2. Поддерживает структурную минимизацию CSS-кода (слияние блоков с одинаковыми селекторами, слияние блоков с одинаковыми свойствами, удаление перекрываемых свойств, удаление повторяющихся селекторов, частичное слияние блоков, частичное разделение блоков, удаление пустых ruleset и at-rule, минимизация margin/padding и т.д.).
  • 24. WG Bundle Transformer: WebGrease Содержит адаптер-минимизатор CSS-кода - WgCssMinifier, созданный на базе семантического CSS-минимизатора WebGrease. Основная информация о WebGrease Разработчик: компания MSN (подразделение Microsoft) Сайт: http://nuget.org/packages/WebGrease Написан на: .NET Особенности: 1. Создан на базе CSS-минимизатора Microsoft Ajax Minifier. 2. Также, как и CSSO, производит структурную минимизацию кода. 3. Текущая версия 1.3.0 все еще содержит ошибки.
  • 26. Sass. Bundle Transformer: Sass and SCSS Содержит адаптер-транслятор SassAndScssTranslator, производящий трансляцию Sass- и SCSS-кода в CSS. Создан на основе исходного кода .NET- библиотеки SassAndCoffee.Ruby (http://github.com/xpaulbettsx/SassAndCoffee). Основная информация о компиляторе Sass Разработчики: Nathan Weizenbaum, Chris Eppstein, Hampton Catlin Сайт: http://sass-lang.com Изначально написан на: Ruby Особенности: 1. Поддерживает 2 типа синтаксиса динамических таблиц стилей: Sass и SCSS. 2. Sass имеет Haml-подобный синтаксис. 3. SCSS является надмножеством CSS. Любой CSS-код является валидным SCSS-кодом. 4. Позволяет использовать при написании таблиц стилей: переменные, вложенные селекторы, примеси, наследование селекторов и т.д.
  • 27. {less} Bundle Transformer: LESS Содержит адаптер-транслятор LessTranslator, который транслирует LESS-код в CSS, средствами .NET-библиотеки dotless (http://www.dotlesscss.org). Основная информация о компиляторе LESS Разработчик: Alexis Sellier Сайт: http://lesscss.org Изначально написан на: JavaScript (Node.js, Rhino и браузер) Особенности: 1. LESS является надмножеством CSS. Любой CSS-код является валидным LESS-кодом. 2. Позволяет использовать при написании таблиц стилей: переменные, вложенные селекторы, примеси, операции (сложение, вычитание, умножение и деление), функции (математические и цветовые), пространства имен и т.д.
  • 28. Lite {less} Bundle Transformer: LESS Lite Содержит адаптер-транслятор LessTranslator, который транслирует LESS-код в CSS, средствами .NET-библиотеки DotlessClientOnly (http://nuget.org/packages/DotlessClientOnly). Особенности реализации 1. Использует для компиляции LESS-кода более легковесную библиотеку (содержит только компилятор). 2. С точки зрения Bundle Transformer функционал BundleTransformer.LessLite полностью эквивалентен BundleTransformer.Less.
  • 29. Bundle Transformer: CoffeeScript Содержит адаптер-транслятор CoffeeScriptTranslator, производящий трансляцию CoffeeScript-кода в JavaScript: Основная информация о компиляторе CoffeeScript Разработчик: Jeremy Ashkenas Сайт: http://coffeescript.org Написан на: JavaScript (Node.js и браузер) Особенности: 1. CoffeeScript добавляет синтаксический сахар в стиле Ruby, Python и Haskell , что позволяет улучшить читаемость кода и уменьшить его размер. 2. Поддерживает классы и наследование.
  • 30. TS Bundle Transformer: TypeScript Содержит адаптер-транслятор TypeScriptTranslator, производящий трансляцию TypeScript-кода в JavaScript: Основная информация о компиляторе TypeScript Разработчик: компания Microsoft (Anders Hejlsberg) Сайт: http://www.typescriptlang.org Написан на: JavaScript (Node.js и браузер) Особенности: 1. TypeScript является надмножеством JavaScript. Любой JavaScript-код является валидным TypeScript-кодом. Если CoffeeScript можно назвать скриптовым Sass, то TypeScript – это скриптовый LESS. 2. Поддерживает статическую типизацию. 3. Поддерживает интерфейсы, классы и модули.
  • 32. Декларативное подключение Декларативное подключение модулей производится с помощью файла Web.config: <?xml version="1.0" encoding="utf-8"?> <configuration> <bundleTransformer xmlns="http://tempuri.org/BundleTransformer.Configuration.xsd"> <core> <css defaultMinifier="KryzhanovskyCssMinifier"> <minifiers> … <add name="KryzhanovskyCssMinifier" type="…" /> </minifiers> <translators> … <add name="LessTranslator" type="…" enabled="true" /> </translators> </css> <js defaultMinifier="ClosureRemoteJsMinifier"> <minifiers> … <add name="ClosureRemoteJsMinifier" type="…" /> </minifiers> <translators> … <add name="TypeScriptTranslator" type="…" enabled="true" /> …
  • 33. Императивное подключение Императивное подключение модулей производится при создании bundle`ов в файле _AppStart.cshtml:
  • 35. Пример сайта ASP.NET Web Pages По адресу http://bundletransformer.codeplex.com/releases/view/96306 можно скачать архив с примером сайта ASP.NET Web Pages, использующего Bundle Transformer (установлены все модули, кроме BundleTransformer.WG):
  • 36. Ссылки • http://bundletransformer.codeplex.com – страница проекта Bundle Transformer на CodePlex • http://github.com/Taritsyn/MsieJavaScriptEngine - страница проекта MSIE JS Engine (использую для запуска под .NET кода следующих JS-библиотек: Packer, UglifyJS, CoffeeScript и TypeScript) на GitHub • www.taritsyn.ru – мой блог • http://aspnetoptimization.codeplex.com – страница проекта Microsoft ASP.NET Web Optimization Framework на CodePlex • http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification - учебник по Microsoft ASP.NET Web Optimization Framework • http://codebetter.com/howarddierking/ - блог Howard Dierking (руководитель проекта Web Optimization) • http://www.microsoft.com/Web/webmatrix/ - сайт среды разработки WebMatrix • http://www.asp.net/web-pages - материалы по ASP.NET Web Pages
  • 37. Спасибо за внимание! АНДРЕЙ ТАРИЦЫН Email: taritsyn@gmail.com Сайт: www.taritsyn.ru Twitter: http://twitter.com/taritsyn