SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Microsoft Ajax Minifier
Автоматическая оптимизация JavaScript and
CSS для веб сайтов высокой
производительности
Евгений Чигиринский Октябрь 2010
eugench@microsoft.com
Что такое минификация и зачем она
нужна
• Рефакторинг JS и CSS файлов с уменьшением
размера файла без потери функциональности
• Экономия траффика
– Некоторые файлы можно сжать до 40-50% от
исходного размера.
• Увеличение скорости загрузки страницы
На что стоит обратить внимание
• Поддержка кода
– Потеря читабельности кода при слишком
аггрессивной минификации
– Ручная минификация может привести к
ошибкам в коде
На что стоит обратить внимание
• Gzip – иногда простое gzip-сжатие дает
приемлемый результат
– Во многих случаях комбинация из
минификации+gzip получается наиболее
оптимальной
– Все зависит от конкретного JS/CSS файла
Минификация JS
• Что можно сделать в первую очередь чтобы
минимизировать JS файл:
– Комментарии
– Пробелы и табуляция
– Использовать короткие имена переменных
– Debugger statements
– Использовать кодировку ASCII или UTF-8
• Unicode только увеличивает размер файла
Минификация JS
• Объявление и инициализация переменных
var x = new Object();
var y = new Array();
var z = new Array(a, b, c);
obj["foo"] = 3
var i = 100000000
var x = {};
var y = [];
var z = [a, b, c];
obj.foo = 3
var i = 1e8
Минификация JS
• Объявление и инициализация переменных
var x1;
var x2;
var x3 = 10;
var x4;
var y1;
var y2;
for (var i = 0; ...)
function foo()
{
var a = "bar";
return a;
}
var x1,x2,x3=10,x4;
for (var y1,y2,i=0; ...)
function foo()
{
return "bar";
}
Минификация JS
• Switch блок
switch (myValue)
{
case "a":
break;
case "b":
a = b;
break;
default:
break;
case "f":
a = f;
break;
}
switch (myValue)
{
case "b":
a = b;
break;
case "f":
a = f;
}
Минификация JS
• Блоки обработки исключений: удаление
пустого блока “finally” только если есть
блок “catch”
try
{
...
}
catch(e)
{
...
}
finally
{
}
try
{
...
}
catch(e)
{
...
}
Минификация JS
• Вызовы функций и блоков кода
function foo(a,b,c,d,e)
{
alert(a);
if (A)
B();
// B() - вызов функции
if (C)
return;
}
function foo(a)
{
alert(a);
A&&B();
C;
}
Минификация CSS
• Пробелы и табуляция
• Комментарии
• Удаление одинаковых селекторов
• Сжатие селекторов
– С одинаковыми именами
– С большим набором одинаковых значений
• Удаление ненужных значений из определений
отступа, цвета, длины и так далее
• Удаление “;” перед закрытием селектора
Минификация CSS
• Сжатие селекторов
#foo
{
color : Blue;
color : Red;
margin : 5 10 5 10
}
...
#foo
{
background-color :
White
}
#foo
{
color : Red;
margin : 5 10;
background-color : White
}
Минификация CSS
• Сжатие селекторов с разными именами
#bar
{
color : Blue;
margin : 0;
padding : 0;
}
...
#foo
{
color : Red;
margin : 0;
padding : 0;
}
#foo,#bar
{
color : Blue;
margin : 0;
padding : 0
}
#foo
{
color : Red
}
Минификация CSS
• Сжатие значений
#foo
{
padding: 0px;
margin: 10 10 10 10;
color : #AABBCC;
}
#foo
{
padding: 0;
margin: 10;
color : #ABC
}
Выводы
• Минификация позволяет существенно
уменьшить размер статического файла
– При чрезмерном увлечении минификацией в
коде, код тяжело поддерживать.
• Оптимальный вариант –
– минификация вручную +
– запуск приложений, которые делают
автоматическое сжатие как часть
сборки/билда.
Microsoft Ajax Minifier
• Автоматическая минификация JS и CSS
– Можно использовать как часть билда для
сборки или как API.
• Исходный код и исполняемые файлы
доступны на http://ajaxmin.codeplex.com
Q&A

Weitere ähnliche Inhalte

Mehr von Fuenteovejuna

Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...Fuenteovejuna
 
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Fuenteovejuna
 
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...Fuenteovejuna
 
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...Fuenteovejuna
 
Динамика DDoS-атак в России, Александр Лямин
Динамика DDoS-атак в России, Александр ЛяминДинамика DDoS-атак в России, Александр Лямин
Динамика DDoS-атак в России, Александр ЛяминFuenteovejuna
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовFuenteovejuna
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинExtreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинFuenteovejuna
 
Мониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Мониторинг XXI-век, Алиса Смирнова, Дима НиконенкоМониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Мониторинг XXI-век, Алиса Смирнова, Дима НиконенкоFuenteovejuna
 
Native Client, Евгений Эльцин
Native Client, Евгений ЭльцинNative Client, Евгений Эльцин
Native Client, Евгений ЭльцинFuenteovejuna
 
Tarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковTarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковFuenteovejuna
 
Real time indexes in Sphinx, Yaroslav Vorozhko
Real time indexes in Sphinx, Yaroslav VorozhkoReal time indexes in Sphinx, Yaroslav Vorozhko
Real time indexes in Sphinx, Yaroslav VorozhkoFuenteovejuna
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав КрюковSphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав КрюковFuenteovejuna
 
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей НековальМасштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей НековальFuenteovejuna
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийВы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийFuenteovejuna
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийFuenteovejuna
 
InnoDB Architecture and Performance Optimization, Peter Zaitsev
InnoDB Architecture and Performance Optimization, Peter ZaitsevInnoDB Architecture and Performance Optimization, Peter Zaitsev
InnoDB Architecture and Performance Optimization, Peter ZaitsevFuenteovejuna
 
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат ГаджибалаевCloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат ГаджибалаевFuenteovejuna
 
Goal Driven Performance Optimization, Peter Zaitsev
Goal Driven Performance Optimization, Peter ZaitsevGoal Driven Performance Optimization, Peter Zaitsev
Goal Driven Performance Optimization, Peter ZaitsevFuenteovejuna
 
The Magic of Hot Streaming Replication, Bruce Momjian
The Magic of Hot Streaming Replication, Bruce MomjianThe Magic of Hot Streaming Replication, Bruce Momjian
The Magic of Hot Streaming Replication, Bruce MomjianFuenteovejuna
 
Rapid Upgrades With Pg_Upgrade, Bruce Momjian
Rapid Upgrades With Pg_Upgrade, Bruce MomjianRapid Upgrades With Pg_Upgrade, Bruce Momjian
Rapid Upgrades With Pg_Upgrade, Bruce MomjianFuenteovejuna
 

Mehr von Fuenteovejuna (20)

Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
Сервер-агрегатор на python (аля Xscript FEST), Сумин Андрей, Сабуренков Михаи...
 
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
Использование 0MQ для построения low latency распределёных систем, Андрей Охл...
 
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
Некоторые аспекты влияния сходимости протокола BGP на доступность сетевых рес...
 
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
Тандемные DDoS-атаки. Проблематика уязвимостей в спецификации TCP IP (фундаме...
 
Динамика DDoS-атак в России, Александр Лямин
Динамика DDoS-атак в России, Александр ЛяминДинамика DDoS-атак в России, Александр Лямин
Динамика DDoS-атак в России, Александр Лямин
 
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай КондратовБыстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
Быстрое развёртывание шаблонов и статики в Mail.ru, Николай Кондратов
 
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей ПантюхинExtreme Cloud Storage on FreeBSD, Андрей Пантюхин
Extreme Cloud Storage on FreeBSD, Андрей Пантюхин
 
Мониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Мониторинг XXI-век, Алиса Смирнова, Дима НиконенкоМониторинг XXI-век, Алиса Смирнова, Дима Никоненко
Мониторинг XXI-век, Алиса Смирнова, Дима Никоненко
 
Native Client, Евгений Эльцин
Native Client, Евгений ЭльцинNative Client, Евгений Эльцин
Native Client, Евгений Эльцин
 
Tarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий ВостриковTarantool Silverbox, Юрий Востриков
Tarantool Silverbox, Юрий Востриков
 
Real time indexes in Sphinx, Yaroslav Vorozhko
Real time indexes in Sphinx, Yaroslav VorozhkoReal time indexes in Sphinx, Yaroslav Vorozhko
Real time indexes in Sphinx, Yaroslav Vorozhko
 
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав КрюковSphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
Sphinx для высоко-нагруженных и масштабируемых проектов, Вячеслав Крюков
 
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей НековальМасштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
Масштабируемая система голосования на базе PostgreSQL PgQ, Сергей Нековаль
 
Вы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья КосмодемьянскийВы решили написать собственное хранилище, Илья Космодемьянский
Вы решили написать собственное хранилище, Илья Космодемьянский
 
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл КоринскийСравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
Сравнительный анализ хранилищ данных, Олег Царев, Кирилл Коринский
 
InnoDB Architecture and Performance Optimization, Peter Zaitsev
InnoDB Architecture and Performance Optimization, Peter ZaitsevInnoDB Architecture and Performance Optimization, Peter Zaitsev
InnoDB Architecture and Performance Optimization, Peter Zaitsev
 
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат ГаджибалаевCloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
Cloud APIs - обзор API западных провайдеров и API Scalaxy, Нат Гаджибалаев
 
Goal Driven Performance Optimization, Peter Zaitsev
Goal Driven Performance Optimization, Peter ZaitsevGoal Driven Performance Optimization, Peter Zaitsev
Goal Driven Performance Optimization, Peter Zaitsev
 
The Magic of Hot Streaming Replication, Bruce Momjian
The Magic of Hot Streaming Replication, Bruce MomjianThe Magic of Hot Streaming Replication, Bruce Momjian
The Magic of Hot Streaming Replication, Bruce Momjian
 
Rapid Upgrades With Pg_Upgrade, Bruce Momjian
Rapid Upgrades With Pg_Upgrade, Bruce MomjianRapid Upgrades With Pg_Upgrade, Bruce Momjian
Rapid Upgrades With Pg_Upgrade, Bruce Momjian
 

Microsoft Ajax Minifier - автоматическая оптимизация JavaScript и CSS для веб сайтов высокой производительности, Евгений Чигиринский

  • 1. Microsoft Ajax Minifier Автоматическая оптимизация JavaScript and CSS для веб сайтов высокой производительности Евгений Чигиринский Октябрь 2010 eugench@microsoft.com
  • 2. Что такое минификация и зачем она нужна • Рефакторинг JS и CSS файлов с уменьшением размера файла без потери функциональности • Экономия траффика – Некоторые файлы можно сжать до 40-50% от исходного размера. • Увеличение скорости загрузки страницы
  • 3. На что стоит обратить внимание • Поддержка кода – Потеря читабельности кода при слишком аггрессивной минификации – Ручная минификация может привести к ошибкам в коде
  • 4. На что стоит обратить внимание • Gzip – иногда простое gzip-сжатие дает приемлемый результат – Во многих случаях комбинация из минификации+gzip получается наиболее оптимальной – Все зависит от конкретного JS/CSS файла
  • 5. Минификация JS • Что можно сделать в первую очередь чтобы минимизировать JS файл: – Комментарии – Пробелы и табуляция – Использовать короткие имена переменных – Debugger statements – Использовать кодировку ASCII или UTF-8 • Unicode только увеличивает размер файла
  • 6. Минификация JS • Объявление и инициализация переменных var x = new Object(); var y = new Array(); var z = new Array(a, b, c); obj["foo"] = 3 var i = 100000000 var x = {}; var y = []; var z = [a, b, c]; obj.foo = 3 var i = 1e8
  • 7. Минификация JS • Объявление и инициализация переменных var x1; var x2; var x3 = 10; var x4; var y1; var y2; for (var i = 0; ...) function foo() { var a = "bar"; return a; } var x1,x2,x3=10,x4; for (var y1,y2,i=0; ...) function foo() { return "bar"; }
  • 8. Минификация JS • Switch блок switch (myValue) { case "a": break; case "b": a = b; break; default: break; case "f": a = f; break; } switch (myValue) { case "b": a = b; break; case "f": a = f; }
  • 9. Минификация JS • Блоки обработки исключений: удаление пустого блока “finally” только если есть блок “catch” try { ... } catch(e) { ... } finally { } try { ... } catch(e) { ... }
  • 10. Минификация JS • Вызовы функций и блоков кода function foo(a,b,c,d,e) { alert(a); if (A) B(); // B() - вызов функции if (C) return; } function foo(a) { alert(a); A&&B(); C; }
  • 11. Минификация CSS • Пробелы и табуляция • Комментарии • Удаление одинаковых селекторов • Сжатие селекторов – С одинаковыми именами – С большим набором одинаковых значений • Удаление ненужных значений из определений отступа, цвета, длины и так далее • Удаление “;” перед закрытием селектора
  • 12. Минификация CSS • Сжатие селекторов #foo { color : Blue; color : Red; margin : 5 10 5 10 } ... #foo { background-color : White } #foo { color : Red; margin : 5 10; background-color : White }
  • 13. Минификация CSS • Сжатие селекторов с разными именами #bar { color : Blue; margin : 0; padding : 0; } ... #foo { color : Red; margin : 0; padding : 0; } #foo,#bar { color : Blue; margin : 0; padding : 0 } #foo { color : Red }
  • 14. Минификация CSS • Сжатие значений #foo { padding: 0px; margin: 10 10 10 10; color : #AABBCC; } #foo { padding: 0; margin: 10; color : #ABC }
  • 15. Выводы • Минификация позволяет существенно уменьшить размер статического файла – При чрезмерном увлечении минификацией в коде, код тяжело поддерживать. • Оптимальный вариант – – минификация вручную + – запуск приложений, которые делают автоматическое сжатие как часть сборки/билда.
  • 16. Microsoft Ajax Minifier • Автоматическая минификация JS и CSS – Можно использовать как часть билда для сборки или как API. • Исходный код и исполняемые файлы доступны на http://ajaxmin.codeplex.com
  • 17. Q&A