SlideShare a Scribd company logo
1 of 77
Download to read offline
Фронтенд
для миллионов
Анастасия Горячева
Avito
Frontdays, Тольятти, май 2017
Анастасия
Горячева
• Frontend teamlead в Avito
• basis.js contributor
• github/tyanas
• twitter/tyanas_
фронтенд?
для миллионов?
Avito.ru
• Популярный
• Высоконагруженный
Подробнее в блоге на Хабре
История
без фронтенда
без фронтенда
фронтендеров
• 2007 – старт Avito
• ~2012 – 1-й фронтендер
• …
• 2017 – ~30 фронтендеров
• 2007 – старт Avito
• ~2012 – 1-й фронтендер
• … –> Фронтенд в Avito WSD, дек 2015
• 2017 – ~30 фронтендеров
• Технологический стек
• Процессы в компании
Технологии
• native JS
• react + redux
• basis.js
Native JS
• ядро сайта Avito.ru
• вкрапления jQuery
• es2015+
React + Redux
• новые проекты
• подключаются как node modules
Что на react?
• autoteka.ru: VIN → карма автомобиля
• Доставка b2c
• Контекстная реклама
• HelpDesk
• Мессенджер
• транспиляция babel
• для css: stylus, css-clean
• сборка gulp + webpack
SPA для pro-пользователей
• ActiAgent.ru недвижимость
• ActiDealer.ru автомобили
Acti*
• написано на basis.js
• инструменты basisjs-tools
• в том числе csso для css
WebSocket
• мессенджер
• в Acti* еще и счетчики, триггеры
Процессы
• Ход разработки
• Сборка, тестирование
• Внедрение нового,
саморазвитие
Что после git push?
Ревью кода
• разработка в ветках
• выше сопровождаемость
• обмен знаниями
• самоконтроль
Ответственность за аппрув
• аппрувят только 1-4 самых опытных
• аппрувят все
• релизят дежурные
• релизят все
In review 🐓 <–> 🥚 In test
Как ускорить ревью?
Меньше рутины
• Линтеры: eslint, stylelint, stylint
• Ворнинги по статическому анализу кода
• Запуск этого .git/hooks/pre-push и при сборке
Зафиксировать соглашения
• меньше скрытых знаний
• не полагаемся на свою память
• инструменты: плагин с чеклистом
Лень – наш друг
Сборка
Avito.ru
• webpack+gulp
• uglify-js для js
• css-clean для css
aaa.css
bbb.styl
ab.css.gz
aaa.css
bbb.styl
transpile
with stylus
aaa.css
bbb.css concat
aaabbb.css
clean-css
ab.css
gzip
ab.css.gz
aaa.css
bbb.styl
transpile
with stylus
aaa.css
bbb.css concat
aaabbb.css
clean-cssab.css
gzip
ab.css.gz
minify
сборка CSS
aaa.js
bbb.es6
transpile
with babel
aaa.js
bbb.js concat
aaabbb.js
uglify-jsab.js
gzip
ab.js.gz
minify
сборка JS
Сборка в Acti*
• сборщик basisjs-tools-build
• внутри – разбор AST, статический анализ кода
• отчеты о ворнингах и ошибках realtime
• csso встроен в basisjs-tools-build
SPA
index.html
сжатый
css
сжатый
js
SPA
index.html
Парсинг,
анализ
Дерево
из AST
файлов
Компрессор
(трансформер)
Дерево
из AST
файлов
Транслятор
сжатый
css
сжатый
js
SPA
index.html
Парсинг,
анализ
Дерево
из AST
файлов
Компрессор
(трансформер)
Дерево
из AST
файлов
Транслятор
Сборка статики
сжатый
css
сжатый
js
SPA
index.html
Парсинг,
анализ
Дерево
из AST
файлов
Компрессор
(трансформер)
Дерево
из AST
файлов
Транслятор
сжатый
css
сжатый
js
index.html
Парсинг,
анализ
Дерево
из AST
файлов
Компрессор
(трансформер)
Дерево
из AST
файлов
Транслятор
сжатый
css
сжатый
js
index.html упоминания
ресурсов
(файлов)
файл
AST
парсинг
файл
AST
парсинг
Статический
анализ
больше ссылок на ресурсы
Дерево
из AST
файловАнализ
дерева
Отчет о разборе дерева
Компрессор
(трансформер)
Дерево
из AST
файлов
Транслятор
сжатый
css
сжатый
js
Отчет о разборе дерева
Отчет о разборе дерева
Выпуск релиза
• боты +- devops’ы
• выкатка на боевые сервера
• регрессионные тесты
• нотификации заинтересованным
Прозрачность

упрощает

контроль
Не фронтенд
Кто тестирует?
• юнит-тесты – сами
• в basis.js встроены ворнинги - заменяет
некоторые тесты
• ручное, пишут тест-кейсы
• частично – функциональные тесты
Дизайн и бэк
• спецификации (a.k.a. спеки)
• живое общение
Бэк: спеки на АПИ
• мобилки – еще один фронт для бэка
• контракты (json-schemas) 

на примере Acti*
Дизайн платформа
• суть: интерактивные спеки на компоненты
• текущий статус: доклад на SPA Meetup, апрель
• подробнее будет на РИТ в июне, 

доклад Александра Лобашева
UX-исследования
• UX-lab
• проектирование интерфейсов
• важно участие фронтендеров на ранних стадиях
Мы не одни

в этой вселенной
То,
чего можно избегать,
но нет
20%
• Развитие платформы
• Рефакторинг
• Внутренние проекты
Конференции
• Роман Дворнов про Rempl,

CodeFest, апрель 2017
• Александр Лобашев, Дизайн-платформа, 

SPA Meetup, апрель 2017
• Александр Амосов, Favicon на стероидах,

Moscow JS, ноябрь 2016
• Сергей Мелюков про Basis.js,

Moscow JS, ноябрь 2016
Митапы
• Проводим SPA Meetup с 2015, 

отчет 2017
• Хоcтим Moscow JS
Open Source
github/css/csso
github/csstree
twitter/rempljs
github/component-inspector
basisjs.com
github/webpack-analyzer
Покажи

свою

работу!
Спасибо!
twitter/tyanas_
github/tyanas gitter/basisjs
gist со ссылками http://bit.ly/frontdays2017
Присоединяйтесь к нам!
• https://twitter.com/AvitoTech
• https://habrahabr.ru/company/avito/
• https://github.com/avito-tech
• https://hh.ru/vacancy/20223454
Вопросы?
twitter/tyanas_

More Related Content

Similar to Front days Фронтенд для миллионов Avito

CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...CodeFest
 
Коктейль Skydive или как мы мы делали 2ГИС-Онлайн
Коктейль Skydive или как мы мы делали 2ГИС-ОнлайнКоктейль Skydive или как мы мы делали 2ГИС-Онлайн
Коктейль Skydive или как мы мы делали 2ГИС-ОнлайнKonstantin Likhter
 
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Ontico
 
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10OdessaFrontend
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Anton Baranov
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...Yandex
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в DjangoMoscowDjango
 
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)Ontico
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.Alexander Titov
 
Интегратор Bitrix_1
Интегратор Bitrix_1Интегратор Bitrix_1
Интегратор Bitrix_1itc73
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...it-people
 
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Yandex
 
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)Ontico
 
Continuous Integration(как мы подружили frontend и backend)
Continuous Integration(как мы подружили frontend и backend)Continuous Integration(как мы подружили frontend и backend)
Continuous Integration(как мы подружили frontend и backend)Talks&Works
 
Continuous integration, или как мы подружили front end и back-end
Continuous integration,  или как мы подружили  front end и back-endContinuous integration,  или как мы подружили  front end и back-end
Continuous integration, или как мы подружили front end и back-endwlbl
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013Roman Pavlushko
 

Similar to Front days Фронтенд для миллионов Avito (20)

CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
CodeFest 2012. Лихтер К, Таратухин И. — Коктейль «Skydive» или как мы делали ...
 
Коктейль Skydive или как мы мы делали 2ГИС-Онлайн
Коктейль Skydive или как мы мы делали 2ГИС-ОнлайнКоктейль Skydive или как мы мы делали 2ГИС-Онлайн
Коктейль Skydive или как мы мы делали 2ГИС-Онлайн
 
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
Как сделать сложное простым. История создания Проект1917 / Сергей Спорышев (I...
 
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
Перепись приложения. Нативного. На JS. Done. | Odessa Frontend Meetup #10
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
Жека Константинов, Дима Белицкий, Слава Аристов — Мастер-класс: разрабатываем...
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
Работа со статикой в Django
Работа со статикой в DjangoРабота со статикой в Django
Работа со статикой в Django
 
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
Переход с Objective-C на Swift — все ли так просто? / Олег Алексеенко (SuperJob)
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
 
Интегратор Bitrix_1
Интегратор Bitrix_1Интегратор Bitrix_1
Интегратор Bitrix_1
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
DUMP-2012 - Управление разработкой - "Опыт смены системы контроля версий" Кон...
 
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
 
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
Лучшие практики CI/CD с Kubernetes и GitLab / Дмитрий Столяров (Флант)
 
Continuous Integration(как мы подружили frontend и backend)
Continuous Integration(как мы подружили frontend и backend)Continuous Integration(как мы подружили frontend и backend)
Continuous Integration(как мы подружили frontend и backend)
 
Continuous integration, или как мы подружили front end и back-end
Continuous integration,  или как мы подружили  front end и back-endContinuous integration,  или как мы подружили  front end и back-end
Continuous integration, или как мы подружили front end и back-end
 
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013AVITO. Решаем проблемы по мере их поступления. Стачка 2013
AVITO. Решаем проблемы по мере их поступления. Стачка 2013
 

Front days Фронтенд для миллионов Avito