SlideShare a Scribd company logo
1 of 22
Download to read offline
1
CSScomb.js
вторая жизнь
Михаил Трошев, Яндекс
MoscowJS, 26 июня 2014
2
Статистика
Наша команда:
6 городов
30 разработчиков
~10 пул-реквестов в день
3
Статистика
Наш код:
> 1 Мб исходного CSS
> 40 000 строк
~140 Кб после минификации
4
Коллективная разработка
большой и старый проект
непрерывная интеграция
автобусное число
коллективное владение кодом
5
Коллективная разработка
код-ревью
код-стайл
договоренности
инструменты
6
Инструменты
JavaScript: JSHint, JSCS, JSLint, ESLint
CSS: ???
7
Инструменты
CSScomb:
+ сортировка
– ничего больше
– PHP
– RegExp
8
Инструменты
TODO: CSScomb.js
9
Слагаемые успеха
10
Ингридиенты
парсер — Gonzales
обвязка — JSCS
модули — TODO
тесты — TODO
11
Схема работы
12
Gonzales AST
color: rgb(255,0,0)	
	
"	
	
['declaration',	
['property',	
['ident', 'color']],	
['propertyDelim'],	
['value',	
['s', ' '],	
['function',	
['ident', 'rgb'],	
['functionBody',	
['number', '255'],	
['operator', ','],	
['number', '0'],	
['operator', ','],	
['number', '0']]]]]
13
Преобразование узлов
processTree: function(tree) {	
this._handlers.forEach(function(handler) {	
this.processNode(['tree', tree], 0, handler);	
}, this);	
return tree;	
},	
	
processNode: function(node, level, handler) {	
node.forEach(function(node) {	
var nodeType = node.shift();	
handler.process(nodeType, node, level);	
node.unshift(nodeType);	
this.processNode(node, level, handler);	
}, this);	
}
14
Обработчик
process: function(nodeType, node) {	
if (nodeType === 'string') {	
if (node[0][0] === '"' && this._value === 'single’)	
node[0] = node[0]	
.replace(/"/g, '"')	
.replace(/([^])'/g, '$1'')	
.replace(/^"|"$/g, ''');	
else if (node[0][0] === ''' && this._value === 'double’)	
node[0] = node[0]	
.replace(/'/g, ''')	
.replace(/([^])"/g, '$1"')	
.replace(/^'|'$/g, '"');	
}	
}
15
На сегодняшний день
— консольный и модульный режимы работы
— lint-режим
— поддержка LESS и SASS
— сортировка + 24 модуля
— автоматическая генерация конфига (!!!)
— плагин для grunt
— плагины для IDE
TODO:
— поддержка Stylus
16
На сегодняшний день
github.com/csscomb/csscomb.js
$ npm i csscomb
версия — 2.0.5
мейнтейнер — @tonyganch
17
Пример
.test{	
-webkit-transition: -webkit-transform .6s;	
transition: transform .6s;	
-webkit-transform: scale(.6,.6);	
transform: scale(.6, .6)}	
	
	
.test	
{	
-webkit-transition: -webkit-transform 0.6s;	
transition: transform 0.6s;	
-webkit-transform: scale(0.6, 0.6);	
transform: scale(0.6, 0.6);	
}
18
Пример
.select__separator{position:relative;z-index:3;float:left;width:
100%;margin-top:-1px;border-top:1px solid;font:0/0 a}	
	
	
.select__separator	
{	
font: 0/0 a;	
	
position: relative;	
z-index: 3;	
	
float: left;	
	
width: 100%;	
margin-top: -1px;	
	
border-top: 1px solid;	
}
19
Полезные ссылки
https://github.com/csscomb/csscomb.js
https://github.com/tonyganch/gonzales-pe
https://github.com/csslint/csslint
https://github.com/css/csso
https://github.com/goalsmashers/clean-css
https://github.com/jshint/jshint/
https://github.com/ikokostya/jshint-groups
https://github.com/mdevils/node-jscs
https://github.com/eslint/eslint
https://github.com/ariya/esprima
20
Спасибо за внимание!
21
Михаил Трошев
Руководитель службы поисковых интерфейсов
mishanga.pro
@ya_mishanga
Яндекс
22
Бонус-трек: оптимизация
170585 	search.sort.css	
165145 	search.css	
143685 	search.csso.css	
143685 	search.csso.sort.css	
142842 	search.clean.sort.css	
142744 	search.clean.css	
29315 	search.sort.css.gzip	
29117 	search.css.gzip	
27784 	search.csso.css.gzip	
27663 	search.clean.css.gzip	
27648 	search.sort.css.gz	
27619 	search.csso.sort.css.gzip	
27532 	search.clean.sort.css.gzip	
27495 	search.css.gz	
26357 	search.csso.css.gz	
26319 	search.clean.css.gz	
26208 	search.csso.sort.css.gz	
26099 	search.clean.sort.css.gz	
*.gz — zopfli --i15
*.gzip — gzip -7
*.sort.* — после запуска csscomb
*.csso.* — после csso
*.clean.* — после clean-css
Победитель:
clean-css + csscomb + zopfli

More Related Content

What's hot

Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Ontico
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
Mikhail Davydov
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupal
Yury Glushkov
 
Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в Django
MoscowDjango
 
Производительность Client-Side
Производительность Client-SideПроизводительность Client-Side
Производительность Client-Side
Aleksandr Boichenko
 
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleЗачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Yandex
 

What's hot (20)

maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014maps.sputnik.ru #highload2014
maps.sputnik.ru #highload2014
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
DUMP-2015: «Redis Кластер» Георгий Бажуков, Nevesta.info
 
Не SQL'ем единым
Не SQL'ем единымНе SQL'ем единым
Не SQL'ем единым
 
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
Выбираем СУБД для хранения временных рядов / Павел Филонов (Лаборатория Каспе...
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
HBase on HappyDev 2013
HBase on HappyDev 2013HBase on HappyDev 2013
HBase on HappyDev 2013
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секунду
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupal
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
Дмитрий Долгов
Дмитрий ДолговДмитрий Долгов
Дмитрий Долгов
 
Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015Jinba - frontendconf.ru/2015
Jinba - frontendconf.ru/2015
 
Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в Django
 
Производительность Client-Side
Производительность Client-SideПроизводительность Client-Side
Производительность Client-Side
 
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
Денис Колошко, Пример нагруженной системы на базе продуктов Microsoft, Amazon...
 
Node
NodeNode
Node
 
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyleЗачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
Зачем нужны постпроцессоры при живых препроцессорах — Алексей Иванов, JetStyle
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
 
Как сделать сайт быстрее?
Как сделать сайт быстрее?Как сделать сайт быстрее?
Как сделать сайт быстрее?
 
MongoDB. Фокус на тестирование
MongoDB. Фокус на тестированиеMongoDB. Фокус на тестирование
MongoDB. Фокус на тестирование
 

Viewers also liked

Breu manual de bones pràctiques de l'independentista
Breu manual de bones pràctiques de l'independentistaBreu manual de bones pràctiques de l'independentista
Breu manual de bones pràctiques de l'independentista
Sergi Pich Cañisà
 
20140627 フェリス女学院大学2014
20140627 フェリス女学院大学201420140627 フェリス女学院大学2014
20140627 フェリス女学院大学2014
Taichi Furuhashi
 
Las tecnologías reflexión momento 3 sección 2 el rol del maestro
Las tecnologías  reflexión momento 3 sección 2 el rol del maestroLas tecnologías  reflexión momento 3 sección 2 el rol del maestro
Las tecnologías reflexión momento 3 sección 2 el rol del maestro
nohrabernal
 
SIGMOD 2013 - Patricia's talk on "Value invention for Data Exchange"
SIGMOD 2013 - Patricia's talk on "Value invention for Data Exchange"SIGMOD 2013 - Patricia's talk on "Value invention for Data Exchange"
SIGMOD 2013 - Patricia's talk on "Value invention for Data Exchange"
Boris Glavic
 
ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบสัมภาษณ์
ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบสัมภาษณ์ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบสัมภาษณ์
ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบสัมภาษณ์
Piyanat Nimkhuntod
 
Green marketing casi completo
Green marketing casi completoGreen marketing casi completo
Green marketing casi completo
DianaMartinez93
 
Relatoio contas sgu 2
Relatoio contas sgu 2Relatoio contas sgu 2
Relatoio contas sgu 2
macoesapo
 

Viewers also liked (20)

Internet, intranet y extranet...
Internet, intranet y extranet...Internet, intranet y extranet...
Internet, intranet y extranet...
 
Breu manual de bones pràctiques de l'independentista
Breu manual de bones pràctiques de l'independentistaBreu manual de bones pràctiques de l'independentista
Breu manual de bones pràctiques de l'independentista
 
Forlini artificial iris for large post traumatic iris coloboma pediatric
Forlini artificial iris for large post traumatic iris coloboma pediatricForlini artificial iris for large post traumatic iris coloboma pediatric
Forlini artificial iris for large post traumatic iris coloboma pediatric
 
Resedás Itupeva - SP
Resedás Itupeva - SPResedás Itupeva - SP
Resedás Itupeva - SP
 
PENSAMIENTOS...
PENSAMIENTOS...PENSAMIENTOS...
PENSAMIENTOS...
 
The Snow
 The Snow The Snow
The Snow
 
20140627 フェリス女学院大学2014
20140627 フェリス女学院大学201420140627 フェリス女学院大学2014
20140627 フェリス女学院大学2014
 
Las tecnologías reflexión momento 3 sección 2 el rol del maestro
Las tecnologías  reflexión momento 3 sección 2 el rol del maestroLas tecnologías  reflexión momento 3 sección 2 el rol del maestro
Las tecnologías reflexión momento 3 sección 2 el rol del maestro
 
Rex
RexRex
Rex
 
RIESGOS FETALES Y MATERNOS EN LUPUS
RIESGOS FETALES Y MATERNOS EN LUPUSRIESGOS FETALES Y MATERNOS EN LUPUS
RIESGOS FETALES Y MATERNOS EN LUPUS
 
Saimiri
SaimiriSaimiri
Saimiri
 
SIGMOD 2013 - Patricia's talk on "Value invention for Data Exchange"
SIGMOD 2013 - Patricia's talk on "Value invention for Data Exchange"SIGMOD 2013 - Patricia's talk on "Value invention for Data Exchange"
SIGMOD 2013 - Patricia's talk on "Value invention for Data Exchange"
 
Pasos para Slideshare.net / bam-s.xxi
Pasos para Slideshare.net / bam-s.xxiPasos para Slideshare.net / bam-s.xxi
Pasos para Slideshare.net / bam-s.xxi
 
Vinaay Shetty
Vinaay ShettyVinaay Shetty
Vinaay Shetty
 
ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบสัมภาษณ์
ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบสัมภาษณ์ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบสัมภาษณ์
ประกาศรายชื่อผู้มีสิทธิเข้ารับการสอบสัมภาษณ์
 
1
11
1
 
Green marketing casi completo
Green marketing casi completoGreen marketing casi completo
Green marketing casi completo
 
Visita estudo 26_junho_2014
Visita estudo 26_junho_2014Visita estudo 26_junho_2014
Visita estudo 26_junho_2014
 
Relatoio contas sgu 2
Relatoio contas sgu 2Relatoio contas sgu 2
Relatoio contas sgu 2
 
Vakcentrales Benelux: voorlichting en scholing grensarbeid beter afstemmen
Vakcentrales Benelux: voorlichting en scholing grensarbeid beter afstemmenVakcentrales Benelux: voorlichting en scholing grensarbeid beter afstemmen
Vakcentrales Benelux: voorlichting en scholing grensarbeid beter afstemmen
 

Similar to "CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
IT-Portfolio
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
Ontico
 
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,..."Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
Yandex
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатация
andreyborue
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
IT-Portfolio
 
Dev {highload}. When you should do your own db.
Dev {highload}. When you should do your own db.Dev {highload}. When you should do your own db.
Dev {highload}. When you should do your own db.
Oleg Kwerty
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Ontico
 

Similar to "CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12 (20)

Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
State of the Standardized Web
State of the Standardized WebState of the Standardized Web
State of the Standardized Web
 
Yandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutionsYandex.Frontend: complex services, complex solutions
Yandex.Frontend: complex services, complex solutions
 
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,..."Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
"Фронтенд в Яндексе: сложные сервисы, непростые решения". Елена Джетпыспаева,...
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
State of the Standardized Web. YaC 2014
State of theStandardized Web. YaC 2014State of theStandardized Web. YaC 2014
State of the Standardized Web. YaC 2014
 
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
Роман Комаров "CSS-препроцессоры: из каменного века — в будущее"
 
CSS. Практика
CSS. ПрактикаCSS. Практика
CSS. Практика
 
Sphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатацияSphinx. настройка, эксплуатация
Sphinx. настройка, эксплуатация
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо... PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
 
Dev {highload}. When you should do your own db.
Dev {highload}. When you should do your own db.Dev {highload}. When you should do your own db.
Dev {highload}. When you should do your own db.
 
CSS-менеджмент в 2016
CSS-менеджмент в 2016CSS-менеджмент в 2016
CSS-менеджмент в 2016
 
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
D2D Pizza JS Тимофей Чаптыков "CSS-менеджмент в 2016"
 
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
Денормализованное хранение данных в PostgreSQL 9.2 (Александр Коротков)
 

More from MoscowJS

More from MoscowJS (20)

Александр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in actionАлександр Русаков - TypeScript 2 in action
Александр Русаков - TypeScript 2 in action
 
Виктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public APIВиктор Розаев - Как не сломать обратную совместимость в Public API
Виктор Розаев - Как не сломать обратную совместимость в Public API
 
Favicon на стероидах
Favicon на стероидахFavicon на стероидах
Favicon на стероидах
 
E2E-тестирование мобильных приложений
E2E-тестирование мобильных приложенийE2E-тестирование мобильных приложений
E2E-тестирование мобильных приложений
 
Reliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkeyReliable DOM testing with browser-monkey
Reliable DOM testing with browser-monkey
 
Basis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA FrameworkBasis.js - Production Ready SPA Framework
Basis.js - Production Ready SPA Framework
 
Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31Контекст в React, Николай Надоричев, MoscowJS 31
Контекст в React, Николай Надоричев, MoscowJS 31
 
Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31Верстка Canvas, Алексей Охрименко, MoscowJS 31
Верстка Canvas, Алексей Охрименко, MoscowJS 31
 
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
Веб без интернет соединения, Михаил Дунаев, MoscowJS 31
 
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
Angular2 Change Detection, Тимофей Яценко, MoscowJS 31
 
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33
 
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
Предсказуемый Viewport, Вопиловский Константин, KamaGames Studio, MoscowJs 33
 
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
Promise me an Image... Антон Корзунов, Яндекс, MoscowJs 33
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
 
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter..."Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...
 
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29
 
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29
 
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
"Observable и Computed на пример KnockoutJS", Ольга Кобец, MoscowJS 29
 
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
«Пиринговый веб на JavaScript», Денис Глазков, MoscowJS 28
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 

"CSScomb.js — вторая жизнь" — Михаил Трошев, Яндекс — доклад на MoscowJS 12