SlideShare a Scribd company logo
CSSO — сжимаем CSS
Роман Дворнов
Avito
Минск 2016
Работаю в Avito
Делаю SPA
Автор basis.js
Мейтенер CSSO
За любую движуху, 

кроме голодовки ;)
3
3
4
«Хэппи-энда» не будет
5
CSS-минификаторы не нужны!
5
Шутка… почти
CSS-минификаторы не нужны!
6
Быстрые 

браузеры
«Тяжелые» 

сайты
6
Быстрые 

браузеры
«Тяжелые» 

сайты
много CSS – нужно сжимать
Чем сжимать?
8
cssnanocsso clean-css
YUI Compressor fork
ycssmin
Герои сегодняшнего дня
8
cssnanocsso clean-css
YUI Compressor fork
ycssmin
Герои сегодняшнего дня
8
cssnanocsso clean-css
YUI Compressor fork
ycssmin
Герои сегодняшнего дня
8
cssnanocsso clean-css
YUI Compressor fork
ycssmin
Герои сегодняшнего дня
8
cssnanocsso clean-css
YUI Compressor fork
ycssmin
Герои сегодняшнего дня
8
cssnanocsso clean-css
YUI Compressor fork
ycssmin
Герои сегодняшнего дня
8
cssnanocsso clean-css
YUI Compressor fork
ycssmin
Герои сегодняшнего дня
8
cssnanocsso clean-css
YUI Compressor fork
ycssmin
Герои сегодняшнего дня
9
Минификаторов гораздо больше,
но либо не популярны 

либо слабо развиваются
Сравниваем
11
clean-css 3.4.9 cssnano 3.5.2 csso 2.0.0
bootstrap.css
147 427 байт
118 186
273 ms
117 440
1 813 ms
117 756
169 ms
foundation.css
200 341 байт
142 667
389 ms
145 030
1 983 ms
144 262
222 ms
normalize.css
7 707 байт
1792
5 ms
1824
17 ms
1 831
4 ms
reset.css
1 092 байт
758
3 ms
773
13 ms
747
3 ms
goalsmashers.github.io/css-minification-benchmark/
Выглядит как-то так…
Библиотеки пишутся
оптимально,
реальный CSS – нет
13
14
clean-css 3.4.9 cssnano 3.5.2 csso 2.0.0
ActiAgent.ru
602 233 байт (5 мес назад)
430 240
1 077 ms
439 024
23 270 ms
435 588
531 ms
ActiAgent.ru
822 021 байт (сейчас)
587 906
1 705 ms
604 503
48 550 ms
595 834
616 ms
В gzip фактор сжатия 8 (~72Kb)
Результат можно улучшить!
Наши цифры
Минификация
Все минификаторы работают похоже
Базовая минификация
• Удаление
• Замена значений
• Структурная оптимизация
17
Кажется, минификация CSS –
это про знание спецификаций
18
На деле – постоянно что-то вылазит
Потому что
• Спецификации меняются
• Разная поддержка браузерами
• Баги браузеров
• Хаки
20
Самое главное
минификатор не должен 

ломать или чинить CSS
21
Удаление
Удаляем
• Пробелы и комментарии (основной выигрыш)
• Правила с неверными селекторами
• Пустые правила
• Неверные декларации
• Неверно расположенные @import, @charset
• …
23
Но нужно учитывать
особенности спецификаций
24
25
calc(4 * 2em - 10% / 3)
Оригинальный CSS
Не правильно
calc(4*2em-10%/3)
Правильно
calc(4*2em - 10%/3)
Удаление пробелов
Еще примеры
• Единицы измерения у нулей

0px ! 0
• Кавычки

[attr="name"] ! [attr=name]

url('image.png') ! url(image.png)
• …
26
Но всегда есть нюансы…
• 0px ! 0

можно
27
Но всегда есть нюансы…
• 0px ! 0

можно
• 0deg ! 0

нельзя, так как не длина
27
Но всегда есть нюансы…
• 0px ! 0

можно
• 0deg ! 0

нельзя, так как не длина
• flex: 1 0 0px ! flex: 1 0 0

нельзя, сломается в IE
27
Замена
Замена значений на более
короткие эквиваленты
29
Наиболее интересное: цвет
• hsl ! rgb, hsla ! rgba
• rgb(100%, 0, 0) ! rgb(255, 0, 0)
• rgba(a, b, c, 1) ! rgb(a, b, c)
• нормализация: rgb(500, -100, 0) ! rgb(255, 0, 0)
• rgb(255, 0, 0) ! #ff0000
• #aabbcc ! #abc
• #ff0000 ! red, darkslateblue ! #483d8b
30
Что еще
• Нормализация чисел: 0.00 ! 0 или 0.123 ! .123
• Специфика для свойств
• font-weight:bold ! font-weight:700
• background:none ! background:0 0
• from ! 0%, 100% ! to в @keyframes
• …
31
Не сильно эффективно
Структурная оптимизация
Слияние и перемещение
деклараций и правил
34
Самая сложная и ресурсоемкая
оптимизация
36
.foo {
color: red;
color: green;
}
.foo {
color: green;
}
Удаление ненужных деклараций
color: red никогда не будет использовано браузером –

можно удалить
Внимание! Викторина
Насколько вы хороший минификатор ;)
37
38
.foo {
color: red;
color: rgba(…);
}
.foo {
color: rgba(…);
}
Удаление ненужных деклараций
Правильно?
38
.foo {
color: red;
color: rgba(…);
}
.foo {
color: rgba(…);
} НЕВЕРНО
В старых браузерах

не поддерживается rgba()
Удаление ненужных деклараций
Правильно?
39
.foo {
color: red;
}
.bar {
color: green;
}
.qux {
color: red;
}
.foo, .qux {
color: red;
}
.bar {
color: green;
}
Перегруппировка
Правильно?
39
.foo {
color: red;
}
.bar {
color: green;
}
.qux {
color: red;
}
.foo, .qux {
color: red;
}
.bar {
color: green;
}
НЕВЕРНО
Разный эффект, например:
<div class="bar qux">
Перегруппировка
Правильно?
40
span {
color: red;
}
div {
color: green;
}
ul {
color: red;
}
span, ul {
color: red;
}
div {
color: green;
}
Перегруппировка
Правильно?
40
span {
color: red;
}
div {
color: green;
}
ul {
color: red;
}
span, ul {
color: red;
}
div {
color: green;
}
Правильно,

у элементов одно имя
Перегруппировка
Правильно?
41
.foo {
color: red;
}
span {
color: green;
}
.bar {
color: red;
}
.foo, .bar {
color: red;
}
span {
color: green;
}
Перегруппировка
Правильно?
41
.foo {
color: red;
}
span {
color: green;
}
.bar {
color: red;
}
.foo, .bar {
color: red;
}
span {
color: green;
}
Правильно,
разная специфичность –
порядок не важен
Перегруппировка
Правильно?
42
.foo {
color: red;
}
.bar:not(.baz) {
color: red;
}
.foo,
.bar:not(.baz) {
color: red;
}
Перегруппировка
Правильно?
42
.foo {
color: red;
}
.bar:not(.baz) {
color: red;
}
.foo,
.bar:not(.baz) {
color: red;
}
Перегруппировка
Правильно?
Старые браузеры 

не поддерживают :not()
НЕВЕРНО
43
И т.д. и т.п.
44
.foo {
color: red;
width: 100px;
}
.bar {
color: green;
width: 100px;
}
.foo, .bar {
width: 100px;
}
.foo {
color: red;
}
.bar {
color: green;
}
Вынос общих частей
Выносить можно в каждом
случае по-разному
45
46
.foo {
color: red;
}
.bar {
color: red;
color: rgba(..);
}
.foo, .bar {
color: red;
}
.bar {
color: rgba(..);
}
Вынос общих частей
В данном примере можно только в начало
47
.foo {
color: rgba(..);
}
.bar {
color: red;
color: rgba(..);
}
.bar {
color: red;
}
.foo, .bar {
color: rgba(..);
}
Вынос общих частей
В данном примере можно только в конец
Очень много нюансов,
нужно знать специфику 

свойств и селекторов
48
Базовая оптимизация
• Похожие методы
• Основной выигрыш дает удаление пробелов
• Много хаков
• У всех есть ошибки
49
Продвинутые оптимизации
Usage data
Usage data
52
.foo {
color: red;
}
.bar {
color: green;
}
.qux {
color: red;
}
.foo, .qux {
color: red;
}
.bar {
color: green;
}
Трансформация не безопасна,
так как мы не знаем как
используется CSS в разметке
Вспомним пример
Но что, если мы знаем как
используется?
53
Фильтрация
55
{
"classes": ["foo", "bar"],
"tags": ["ul", "li"]
}
.foo { color: red }
div.bar { color: green }
ul li, ol li { color: blue }
usage.json
CSS
+ .foo { color: red }
ul li { color: blue }
Результат
Scopes
Пример
57
.module1-foo { background: red; }
.module1-bar { font-size: 1.5em; background: yellow; }
.module2-baz { background: red; }
.module2-qux { font-size: 1.5em; background: yellow; width: 50px; }
Нельзя объединить 

.module1-foo и .module2-baz,
так как между ними .module1-bar
Пример
58
.module1-foo { background: red; }
.module1-bar { font-size: 1.5em; background: yellow; }
.module2-baz { background: red; }
.module2-qux { font-size: 1.5em; background: yellow; width: 50px; }
Минификатор не знает, 

что имена не смешиваются 

и можно безопасно перемещать
Usage data
59
{
"scopes": [
["module1-foo", "module1-bar"],
["module2-baz", "module2-qux"]
]
}
Так мы гарантируем, что классы 

module1-* и module2-* 

не встречаются на одном элементе
Результат с usage data
60
.module1-foo,.module2-baz{background:red}
.module1-bar,.module2-qux{font-size:1.5em;background:#ff0}
.module2-qux{width:50px}
На 29 байт меньше, чем без usage data
61
Уже поддерживается в CSSO!
Что это дало нашему проекту
• 823 Kb Оригинальный CSS
• 596 Kb Базовая минификация
• 437 Kb Минификация с usage data
62
Улучшение результата на 159Kb (26%)
Как генерировать usage data?
63
Универсального решения нет –
все зависит от используемого стека
Rename
Rename
65
.foo { color: red }
.foo.bar { color: green }
.a { color: red }
.a.b { color: green }
{
"foo": "a",
"bar": "b"
}
rename map
Результат
CSS
+
66
• 823 Kb Оригинальный CSS
• 596 Kb Базовая минификация
• 385 Kb Rename (пока вне CSSO)
Улучшение результата на 211Kb (35%)
Что это дало нашему проекту
67
Улучшение результата на 364Kb (61%)
Все вместе
• 823 Kb Оригинальный CSS
• 596 Kb Базовая минификация
• 232 Kb Rename + Usage data
Должно ли это быть 

в минификаторе?
68
69
.foo,
.bar {
color: red;
}
.foo:hover,
.bar:hover {
color: green
}
.a { color: red }
.a:hover { color: green }
{
"foo": "a",
"bar": "a"
}
rename map
РезультатCSS
+
Кто будет писать такой CSS?
70
Usage data!
71
.foo {
color: red;
}
.foo:hover {
color: green
}
.bar {
color: red;
}
.bar:hover {
color: green
}
РезультатCSS + usage data
.foo,
.bar {
color: red;
}
.foo:hover,
.bar:hover {
color: green
}
В разработке – скоро в CSSO
73
• ~10 Kb дополнительного выигрыша (~3-4%)
• 1431 удаленный селектор из 6904
Селекторов стало на ~20% меньше
Что это дало нашему проекту
предварительные оценки
74
Сжимать или не сжимать?
На что влияет минификация?
75
76
Network
Paint
Parse Stylesheet
Recalculate Style
Layout
Как CSS превращается в картинку
77
Network
Paint
Parse Stylesheet
Recalculate Style
Layout
Влияние характеристик CSS на скорость
Влияют количественные
характеристики CSS
(размер, кол-во селекторов и т.д.)
Влияют качественные
характеристики CSS
(сложность расчетов и отрисовки)
78
Network
Paint
Parse Stylesheet
Recalculate Style
Layout
Автоматизация улучшений
Компрессия может
оказать положительный
эффект
Пока нет предпосылок,
что задача решается
79
Network
Paint
Parse Stylesheet
Recalculate Style
Layout
Network
Решение: gzip, SDCH …
Имеет эффект только 

для холодной загрузки
Неоптимизированный CSS
сжимается лучше
80
Network
Paint
Parse Stylesheet
Recalculate Style
Layout
Parse Stylesheet
Решение: сжатие CSS
Тут gzip уже не играет
роли, выполняется всегда
на старте + мутация DOM
Меньше текста – меньше
парсить
Без сжатия 823 Kb – 35ms
Базовое сжатие 596 Kb – 29ms
Rename 385 Kb – 24ms
Rename + usage data 232 Kb – 22ms
81
Наколеночные тест
Влияние разного уровня сжатия на время парсинга
Размер уменьшился в ~4 раза, но время лишь на ~50%
(Chrome на MacBook Air)
Win10 Desktop 19ms → 11ms
Nexus 5X 68ms → 44ms
Samsung Galaxy Note 2 158ms → 108ms
82
Наколеночные тесты
Ранее, на других устройствах, были получены более
обнадеживающие цифры при улучшении сжатия
CSS 316Kb 215Kb (-39.5%)
+ usage data
83
Network
Paint
Parse Stylesheet
Recalculate Style
Layout
Parse Stylesheet
Решение: rename и др.
Уменьшение кол-ва
селекторов, их сложности
Пока гипотезы, цифр нет, 

но будут как только фича
появится в CSSO ;)
Сжимать или не сжимать?
84
Сжимать или не сжимать?
84
Да! Хуже не будет
Хотя эффект – предмет для исследований
CSSO – новая жизнь
Что изменилось
• В 10+ раз быстрее
• В 8+ раз меньше потребление памяти
• Исправлена большая часть проблем и багов
• Улучшена кодовая база и API
• Больше скачиваний и звезд на GitHub ;)
86
87
ВремясжатияCSS(600Kb)
500 ms
1 000 ms
1 500 ms
2 000 ms
2 500 ms
3 000 ms
3 500 ms
4 000 ms
4 500 ms
5 000 ms
5 500 ms
6 000 ms
Версия CSSO
1.4.0 1.5.0 1.6.0 1.7.0 1.8.0 2.0
1 050 ms
clean-css
Изменение по скорости
csso
500 ms
cssnano
23 250 ms
postcss-csso
88
Плагин для PostCSS, aльтернатива cssnano
Работает почти также быстро как CSSO отдельно
Под капотом конвертация AST
github.com/lahmatiy/postcss-csso
89
1 300 000+ скачиваний в месяц
x9 с октября 2015
Новое
• Source Maps
• Usage data
• Лучше поддержка "новых" частей в CSS
• Лучше сообщения об ошибках
• Поддержка stdin
• Новый формат AST
90
Планы
Главная цель – лучший минификатор
Coming soon
• Новые оптимизации и алгоритмы: быстрее и правильно
• Учет поддерживаемых браузеров
• Семейства свойств и сортировка деклараций
• Нормализация имен и переименование
• Понимание структуры shorthand-значений
• Применение статистики
93
В заключении
Любите CSS, читайте спеки
96Используйте CSSO :)
97
Все новое в твитере @cssoptimizer
Роман Дворнов
@rdvornov
rdvornov@gmail.com
Вопросы?
github.com/css/csso
Ad

Recommended

"Пиринговый веб на JavaScript"
"Пиринговый веб на JavaScript"
FDConf
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.
FDConf
 
Wordpress Cron
Wordpress Cron
versusbassz
 
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"
Fwdays
 
Batch processing on RoR
Batch processing on RoR
Александр Ежов
 
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
Pavel Dovbush
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORM
Badoo Development
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
Timophy Chaptykov
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
FDConf
 
Batch processing in rails
Batch processing in rails
sergeymoiseev
 
Парсер: что? зачем? как?
Парсер: что? зачем? как?
STEP Computer Academy (Zaporozhye)
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ontico
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Tanya Denisyuk
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
corehard_by
 
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Ontico
 
MxxRu::externals: Repositoryless Dependency Manager
MxxRu::externals: Repositoryless Dependency Manager
corehard_by
 
Расширения для PostgreSQL
Расширения для PostgreSQL
Anastasia Lubennikova
 
How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)
Ontico
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
SmartTools
 
Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.
Anastasia Lubennikova
 
Практический опыт создания уменьшенной копии боевой инфраструктуры сайта для ...
Практический опыт создания уменьшенной копии боевой инфраструктуры сайта для ...
Андрей Шорин
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Ontico
 
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Yandex
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
 
Hacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данных
Anastasia Lubennikova
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Alexey Lesovsky
 
Perl in practice
Perl in practice
Oleg Alistratov
 
Migrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to Redux
FDConf
 
Dart: питание и сила для вашего проекта
Dart: питание и сила для вашего проекта
FDConf
 

More Related Content

What's hot (20)

React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
Timophy Chaptykov
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
FDConf
 
Batch processing in rails
Batch processing in rails
sergeymoiseev
 
Парсер: что? зачем? как?
Парсер: что? зачем? как?
STEP Computer Academy (Zaporozhye)
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ontico
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Tanya Denisyuk
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
corehard_by
 
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Ontico
 
MxxRu::externals: Repositoryless Dependency Manager
MxxRu::externals: Repositoryless Dependency Manager
corehard_by
 
Расширения для PostgreSQL
Расширения для PostgreSQL
Anastasia Lubennikova
 
How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)
Ontico
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
SmartTools
 
Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.
Anastasia Lubennikova
 
Практический опыт создания уменьшенной копии боевой инфраструктуры сайта для ...
Практический опыт создания уменьшенной копии боевой инфраструктуры сайта для ...
Андрей Шорин
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Ontico
 
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Yandex
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer tools
2ГИС Технологии
 
Hacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данных
Anastasia Lubennikova
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Alexey Lesovsky
 
Perl in practice
Perl in practice
Oleg Alistratov
 
React со скоростью света: не совсем обычный серверный рендеринг
React со скоростью света: не совсем обычный серверный рендеринг
Timophy Chaptykov
 
«Как перестать отлаживать асинхронные вызовы и начать жить»​
«Как перестать отлаживать асинхронные вызовы и начать жить»​
FDConf
 
Batch processing in rails
Batch processing in rails
sergeymoiseev
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ontico
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Tanya Denisyuk
 
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
Модульность и управляемая многопоточность встраиваемых С++ приложений - трудн...
corehard_by
 
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Практика применения Pinba в Badoo / Денис Карасик (Badoo)
Ontico
 
MxxRu::externals: Repositoryless Dependency Manager
MxxRu::externals: Repositoryless Dependency Manager
corehard_by
 
Расширения для PostgreSQL
Расширения для PostgreSQL
Anastasia Lubennikova
 
How to build solid CI-CD pipeline / Илья Беда (beda.software)
How to build solid CI-CD pipeline / Илья Беда (beda.software)
Ontico
 
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
SmartTools
 
Hacking PostgreSQL. Разделяемая память и блокировки.
Hacking PostgreSQL. Разделяемая память и блокировки.
Anastasia Lubennikova
 
Практический опыт создания уменьшенной копии боевой инфраструктуры сайта для ...
Практический опыт создания уменьшенной копии боевой инфраструктуры сайта для ...
Андрей Шорин
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Ontico
 
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Yandex
 
Hacking PostgreSQL. Физическое представление данных
Hacking PostgreSQL. Физическое представление данных
Anastasia Lubennikova
 
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Alexey Lesovsky
 

Viewers also liked (9)

Migrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to Redux
FDConf
 
Dart: питание и сила для вашего проекта
Dart: питание и сила для вашего проекта
FDConf
 
Если у вас нету тестов...
Если у вас нету тестов...
FDConf
 
Будь первым
Будь первым
FDConf
 
Redux. From twitter hype to production
Redux. From twitter hype to production
FDConf
 
"Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native "
FDConf
 
Scalable Angular 2 Application Architecture
Scalable Angular 2 Application Architecture
FDConf
 
В погоне за производительностью
В погоне за производительностью
Denys Mishunov
 
Digital pipeline — инновации в продажах / Михаил Токовинин
Digital pipeline — инновации в продажах / Михаил Токовинин
Ontico
 
Migrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to Redux
FDConf
 
Dart: питание и сила для вашего проекта
Dart: питание и сила для вашего проекта
FDConf
 
Если у вас нету тестов...
Если у вас нету тестов...
FDConf
 
Будь первым
Будь первым
FDConf
 
Redux. From twitter hype to production
Redux. From twitter hype to production
FDConf
 
"Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native "
FDConf
 
Scalable Angular 2 Application Architecture
Scalable Angular 2 Application Architecture
FDConf
 
В погоне за производительностью
В погоне за производительностью
Denys Mishunov
 
Digital pipeline — инновации в продажах / Михаил Токовинин
Digital pipeline — инновации в продажах / Михаил Токовинин
Ontico
 
Ad

Similar to CSSO — сжимаем CSS (20)

CSSO — сжимаем CSS Роман Дворнов, Avito
CSSO — сжимаем CSS Роман Дворнов, Avito
it-people
 
CSSO — минимизируем CSS
CSSO — минимизируем CSS
Roman Dvornov
 
SASS & LESS
SASS & LESS
Raman Budny
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ontico
 
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Yandex
 
Жизнь в изоляции
Жизнь в изоляции
Roman Dvornov
 
Сергей Сыркин - CSS
Сергей Сыркин - CSS
Yandex
 
Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»
Yandex
 
Михаил Трошев — CSS: Систематизация базовых знаний
Михаил Трошев — CSS: Систематизация базовых знаний
Yandex
 
Робота з CSS. Методології, інструменти, оптимізація
Робота з CSS. Методології, інструменти, оптимізація
Stfalcon Meetups
 
Trening modul2-conf1-tema5
Trening modul2-conf1-tema5
olgaoov
 
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Yandex
 
Less
Less
Timofey Chukleev
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)
Ontico
 
LESS and even more. Anton Shubkin.
LESS and even more. Anton Shubkin.
ADCI Solutions
 
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
Dev2Dev
 
CSS-менеджмент в 2016
CSS-менеджмент в 2016
Timophy Chaptykov
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Тарасов Константин
 
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Yandex
 
A вы верите в систематизацию
A вы верите в систематизацию
Irina Levina
 
CSSO — сжимаем CSS Роман Дворнов, Avito
CSSO — сжимаем CSS Роман Дворнов, Avito
it-people
 
CSSO — минимизируем CSS
CSSO — минимизируем CSS
Roman Dvornov
 
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ваш CSS нас не устраивает, мы придумаем свой / Роман Прудников (2ГИС)
Ontico
 
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Yandex
 
Жизнь в изоляции
Жизнь в изоляции
Roman Dvornov
 
Сергей Сыркин - CSS
Сергей Сыркин - CSS
Yandex
 
Роман Комаров — «Механизм работы браузера»
Роман Комаров — «Механизм работы браузера»
Yandex
 
Михаил Трошев — CSS: Систематизация базовых знаний
Михаил Трошев — CSS: Систематизация базовых знаний
Yandex
 
Робота з CSS. Методології, інструменти, оптимізація
Робота з CSS. Методології, інструменти, оптимізація
Stfalcon Meetups
 
Trening modul2-conf1-tema5
Trening modul2-conf1-tema5
olgaoov
 
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Yandex
 
Жизнь в изоляции / Роман Дворнов (Avito)
Жизнь в изоляции / Роман Дворнов (Avito)
Ontico
 
LESS and even more. Anton Shubkin.
LESS and even more. Anton Shubkin.
ADCI Solutions
 
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
Dev2Dev
 
CSS-менеджмент в 2016
CSS-менеджмент в 2016
Timophy Chaptykov
 
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Современная верстка с адекватными трудозатратами Максим Тимохин, технолог, И...
Тарасов Константин
 
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Yandex
 
A вы верите в систематизацию
A вы верите в систематизацию
Irina Levina
 
Ad

More from FDConf (20)

Антон Киршанов - «Квант изменения. Реактивные реакции на React.
Антон Киршанов - «Квант изменения. Реактивные реакции на React.
FDConf
 
Игорь Еростенко - Создаем виртуальный тур
Игорь Еростенко - Создаем виртуальный тур
FDConf
 
Илья Климов - Reason: маргиналы против хайпа
Илья Климов - Reason: маргиналы против хайпа
FDConf
 
Максим Щепелин - Доставляя веб-контент в игру
Максим Щепелин - Доставляя веб-контент в игру
FDConf
 
Александр Черноокий - Как правило "победитель получает все" работает и не раб...
Александр Черноокий - Как правило "победитель получает все" работает и не раб...
FDConf
 
Михаил Волчек - Что такое Цифровая мастерская?
Михаил Волчек - Что такое Цифровая мастерская?
FDConf
 
Radoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and Apollo
FDConf
 
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
FDConf
 
Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless
FDConf
 
Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?
FDConf
 
В погоне за производительностью
В погоне за производительностью
FDConf
 
«I knew there had to be a better way to build mobile app»​
«I knew there had to be a better way to build mobile app»​
FDConf
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
FDConf
 
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
FDConf
 
«От экспериментов с инфраструктурой до внедрения в продакшен»​
«От экспериментов с инфраструктурой до внедрения в продакшен»​
FDConf
 
«The Grail: React based Isomorph apps framework»​
«The Grail: React based Isomorph apps framework»​
FDConf
 
«The Illusion of Time. When 60 sec is not 1 minute»​
«The Illusion of Time. When 60 sec is not 1 minute»​
FDConf
 
«Книги в браузере»
«Книги в браузере»
FDConf
 
«Как работают современные интерактивные карты на WebGL»​
«Как работают современные интерактивные карты на WebGL»​
FDConf
 
«# Self Modifying Code»​
«# Self Modifying Code»​
FDConf
 
Антон Киршанов - «Квант изменения. Реактивные реакции на React.
Антон Киршанов - «Квант изменения. Реактивные реакции на React.
FDConf
 
Игорь Еростенко - Создаем виртуальный тур
Игорь Еростенко - Создаем виртуальный тур
FDConf
 
Илья Климов - Reason: маргиналы против хайпа
Илья Климов - Reason: маргиналы против хайпа
FDConf
 
Максим Щепелин - Доставляя веб-контент в игру
Максим Щепелин - Доставляя веб-контент в игру
FDConf
 
Александр Черноокий - Как правило "победитель получает все" работает и не раб...
Александр Черноокий - Как правило "победитель получает все" работает и не раб...
FDConf
 
Михаил Волчек - Что такое Цифровая мастерская?
Михаил Волчек - Что такое Цифровая мастерская?
FDConf
 
Radoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and Apollo
FDConf
 
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
FDConf
 
Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless
FDConf
 
Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?
FDConf
 
В погоне за производительностью
В погоне за производительностью
FDConf
 
«I knew there had to be a better way to build mobile app»​
«I knew there had to be a better way to build mobile app»​
FDConf
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
FDConf
 
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
«Идеи и алгоритмы создания масштабируемой архитектуры в играх»​
FDConf
 
«От экспериментов с инфраструктурой до внедрения в продакшен»​
«От экспериментов с инфраструктурой до внедрения в продакшен»​
FDConf
 
«The Grail: React based Isomorph apps framework»​
«The Grail: React based Isomorph apps framework»​
FDConf
 
«The Illusion of Time. When 60 sec is not 1 minute»​
«The Illusion of Time. When 60 sec is not 1 minute»​
FDConf
 
«Книги в браузере»
«Книги в браузере»
FDConf
 
«Как работают современные интерактивные карты на WebGL»​
«Как работают современные интерактивные карты на WebGL»​
FDConf
 
«# Self Modifying Code»​
«# Self Modifying Code»​
FDConf
 

Recently uploaded (7)

Saint Charbel,  Maronite monk and priest from Lebanon (Russian).pptx
Saint Charbel,  Maronite monk and priest from Lebanon (Russian).pptx
Martin M Flynn
 
Газовая промышленность Газовая промышленность
Газовая промышленность Газовая промышленность
sabetovagulmaral
 
FactoryTalk View Site Edition Руководство пользователя Том 1 Allen-Bredley.
FactoryTalk View Site Edition Руководство пользователя Том 1 Allen-Bredley.
xqtsxflc938
 
VBA для чайников 3rd Edition Steve Cummings
VBA для чайников 3rd Edition Steve Cummings
fnupzgprv4318
 
Bondarenko, Maria (2020, February). Representation of Motion and Direction in...
Bondarenko, Maria (2020, February). Representation of Motion and Direction in...
MashaBondarenko4
 
PowerPoint 2003 for Dummies 1st Edition Doug Lowe
PowerPoint 2003 for Dummies 1st Edition Doug Lowe
yexvsrzykn2676
 
Milestones in analog and digital computing vol 1 3rd Edition Herbert Bruderer
Milestones in analog and digital computing vol 1 3rd Edition Herbert Bruderer
bjozmwfwh2753
 
Saint Charbel,  Maronite monk and priest from Lebanon (Russian).pptx
Saint Charbel,  Maronite monk and priest from Lebanon (Russian).pptx
Martin M Flynn
 
Газовая промышленность Газовая промышленность
Газовая промышленность Газовая промышленность
sabetovagulmaral
 
FactoryTalk View Site Edition Руководство пользователя Том 1 Allen-Bredley.
FactoryTalk View Site Edition Руководство пользователя Том 1 Allen-Bredley.
xqtsxflc938
 
VBA для чайников 3rd Edition Steve Cummings
VBA для чайников 3rd Edition Steve Cummings
fnupzgprv4318
 
Bondarenko, Maria (2020, February). Representation of Motion and Direction in...
Bondarenko, Maria (2020, February). Representation of Motion and Direction in...
MashaBondarenko4
 
PowerPoint 2003 for Dummies 1st Edition Doug Lowe
PowerPoint 2003 for Dummies 1st Edition Doug Lowe
yexvsrzykn2676
 
Milestones in analog and digital computing vol 1 3rd Edition Herbert Bruderer
Milestones in analog and digital computing vol 1 3rd Edition Herbert Bruderer
bjozmwfwh2753
 

CSSO — сжимаем CSS