SlideShare a Scribd company logo
1 of 38
Download to read offline
BEM на корпоративном
веб-ресурсе —
отказоустойчивость
фронтенда
Кирилл Лапенин (МегаФон), Алексей Ярошевич (DALEE)
Что такое MegaFon.ru
Это сайты для:
• частных клиентов;
• корпоративных
клиентов;
• операторов связи;
• инвесторов;
• прессы
И 81 региональная
версия каждого из них
Что	
  такое	
  megafon.ru
Это более 100 задач на
разработку в месяц,
более 400 контентных
задач в месяц
Что такое MegaFon.ru
Что	
  такое	
  megafon.ru
Как поддерживать?
Что такое MegaFon.ru
…БЭМ
Про что
● Про историю, евпаторию, меланхолию
● Про грабли — и что делать, чтобы на них не наступить
● Про что-то, похожее на #b_
● Про сборку и БЭМ-ориентированность
● Про интеграцию — бесконечный процесс БЭМификации
● Про стек MegaFon.ru и наши былинные отказы
● Про плюшки (и ватрушки)
● Про верную дорогу и светлое будущее
Про что
● Про историю, евпаторию, меланхолию
● Про грабли — и что делать, что на них наступить
● Про что-то похожее на #b_
● Про сборку и БЭМ-ориентированность
● Про интеграцию — бесконечный процесс БЭМификации
● Про стек MegaFon.ru и наши былинные отказы
● Про плюшки (и ватрушки)
● Про верную дорогу и светлое будущее
Появление БЭМ
«Блоком будем называть фрагмент страницы, который
описывается своей разметкой и стилями»
«1. никогда не опираться на элементы,

только на классы;

2. всем классам внутри блока давать имена, начинающиеся с
имени этого блока»

.b-user b → .b-user__first-letter
Доклад @vithar на ClientSide'2007
Лего 1.0, 2008 — разделение по технологиям, ручные @import,
префиксы b-, l-, i-, g-, и т.д.
Появление БЭМ
•Лего 2.0, 2009 — Блоки первичны, технологии
вторичны
•Выделение БЭМ сущностей:
•Блок — это элемент на странице, имеющий значение,
имеющий отражение в разных технологиях,
включаемых в его файловую структуру.
•Элемент — часть блока, не имеющая без него
смысла, и тоже состоящая из технологий.
•Модификатор — штучка, модифицирующая блок.
•Авто-генерация из XML: main.js, main.css, main.xsl.
Появление БЭМ
Проблема скорости CSS селекторов, 2009
Нотация .b-block__elem_modifier_value
Появление БЭМ
Open Source, 2010
- Уровни переопределения
- Библиотека блоков: bem-bl
- Инструменты: bem-tools
http://bit.ly/bemstory-talk
Появление БЭМ в MegaFon.Ru
7 000 строк CSS.
Разве это много?!
Появление БЭМ в MegaFon.Ru
А если еще 5600? ;-)
Не методология БЭМ
•«Что-то про CSS?»
•Длинные имена классов: btn? → b-button!
•Префиксы для классов: b-, i-, g-, js-
•Вложенные элементы: nav__item__link
•Отсутствие каскадов — никаких .page_theme .link!
•Неоправданные каскады: .nav__item .link vs .nav__link
•Web Components — близко, но нет
•Прозрачность и простота — к сожалению, пока тоже нет
Не методология БЭМ
Обычный подход и БЭМ
Обычный подход и БЭМ
Предпосылки для перехода на БЭМ:
• Разделение интерфейса на «АНБ»;
• Учет весов селекторов;
• Осмысленное применение каскадов;
• Отделение логики представления от бизнес-логики;
• Разнесение общих файлов на модули или плагины;
• Команда, высокий BUS-фактор и соглашения;
• Инструменты и «предпродажная» подготовка;
• Тестирование и документирование, наконец!
Обычный подход и БЭМ
ПРОЦЕСС РАЗРАБОТКИ ПРОЦЕСС
РАЗРАБОТКИ

БЭМ
ДИЗАЙН
СТАТИСТИКА
ДИНАМИКА
ПРОЦЕСС РАЗРАБОТКИ

БЭМ
ДИЗАЙН СТАТИСТИКА
ДИНАМИКА ДОКУМЕНТАЦИЯ
СЕРВИС БОЛЬШОЙ СЕРВИС
Обычный подход и БЭМ
Предпосылки для перехода на БЭМ:
• Разделение интерфейса на «АНБ»;
• Учет весов селекторов;
• Осмысленное применение каскадов;
• Отделение логики представления от бизнес-логики;
• Разнесение общих файлов на модули или плагины;
• Команда, высокий BUS-фактор и соглашения;
• Инструменты и «предпродажная» подготовка;
• Тестирование и документирование, наконец!
Обычный подход и БЭМ
Методология БЭМ
Методология БЭМ — это набор паттернов и способ описывать
действительность при помощи кода и размышлять о БЭМ-
сущностях;
БЭМ-сущность — это определение содержания страницы или
сущность в БЭМ-предметной области (блок, элемент);
Реализация (в технологии) — функциональная часть БЭМ-
сущности, описанная в рамках конкретной технологии файлом
или папкой с набором файлов;
Технология (tech, technology) — инструкция (или процесс) для
преобразования исходных материалов в целевой продукт;
Методология БЭМ
mega-blocks/common.blocks
button/
__control/
button__control.less
button.less
button.tmpl
header/
_christmas/
header_christmas.less
header.less
header.tmpl
tabbed-pane/
tabbed-pane.less
tabbed-pane.js
tabbed-pane.tmpl
project/blocks/
button/
button.less
tabbed-pane/
tabbed-pane.less
phone-input/
phone-input.less
phone-input.js
phone-input.tmpl
p-mnp/
p-mnp.deps.json
p-mnp.less
p-mnp.js
p-mnp.tmpl
...
Методология БЭМ
Процесс сборки БЭМ-проекта
project/bundles/
mnp/
mnp.bemjson.js
mnp.bemdecl.js*
mnp.bemjson.js:
({ block: 'p-mnp',
content: [
{ block: 'text', content:
'Введите свой телефон' },
{ block: 'phone-input',
name: 'msisdn' },
{ block: 'button', mods: {
type: 'submit'
} }
]})
mnp.bemdecl.js:
exports.blocks = [
{ "name": "p-mnp" },
{ "name": "text" },
{ "name": "phone-input" },
{ "name": "button" }
];
mnp.deps.js:
exports.deps = [
{ "block": "i-bem" },
{ "block": "p-mnp" },
{ "block": "text" },
{ "block": "phone-input" }
];
Процесс сборки БЭМ-проекта
project/bundles/
mnp/
mnp.bemjson.js
mnp.bemdecl.js
mnp.deps.js
mnp.css
mnp.js
mnp.tmpl
mnp.html
_mnp.css
_mnp.js
Постпроцессоры:
- borschik (jsmin+csso+freeze)
- autoprefixer
- cssrb
- csscomb
- uglifyjs
- rtlcss
- postcss
- ваш вариант
Процесс сборки MegaFon.ru
project/blocks/
button/
button.less
tabbed-pane/
tabbed-pane.less
phone-input/
phone-input.less
phone-input.js
phone-input.tmpl
p-mnp/
p-mnp.deps.json
p-mnp.less
p-mnp.js
p-mnp.tmpl
...
compiled/blocks/
button/
button.css
tabbed-pane/
tabbed-pane.css
phone-input/
phone-input.css
phone-input.min.js
phone-input.tmpl
p-mnp/
p-mnp.deps.json
p-mnp.css
p-mnp.min.js
p-mnp.tmpl
...
Процесс сборки MegaFon.ru
some.tmpl:
<{$tag} {$ibem}> <!-- можно опустить -->
<!-- вывод переменной из данных -->
<div class="{$b__}title">{$data.title}<div>
<!-- вывод внутренних блоков -->
<div class="{$b__}content">{$content}</div>
<!-- подтянуть блок — не забываем для него css и js -->
{b name="b-button" class="`$b__`trigger" tag="a"
content="trigger"}
</{$tag}>
Процесс сборки MegaFon.ru
another.tmpl:
<!-- перебор всех блоков -->
<ul class="{$b__}list">
{foreach from=$content item=b}
<li class="{$b__}item">
<!-- динамические вставки блоков ;-( -->
{b name=$b.block data=$b.data mods=$b.mods ...}
</li>
{/foreach}
</ul>
Процесс сборки MegaFon.ru
blocks/**/*.tmpl + blocks/**/*.deps → deps → *.css, *.js
Отказы переходного периода:
• В коде шаблонов хранятся данные о зависимостях;
• В шаблоны передаются произвольные BEM-деревья;
• Исчезновение глобального скоупа в шаблонах;
• Скрипты на селекторах (jQuery, $__$);
• «А как верстать?» — спрашивала команда;
• В модулях начал расти view-ориентированный код
Процесс сборки MegaFon.ru
blocks/**/*.tmpl + blocks/**/*.deps → deps → *.css, *.js
Отказы переходного периода:
• В коде шаблонов хранятся данные о зависимостях;
• В шаблоны передаются произвольные BEM-деревья;
• Исчезновение глобального скоупа в шаблонах;
• Скрипты на селекторах (jQuery, $__$);
• «А как верстать?» — спрашивала команда;
• В модулях начал расти view-ориентированный код
Корпоративный сайт c БЭМ
Интеграция с CMS
• Меташаблоны (m-)
• Страницы (p-)
• Модули и достраивание дерева страницы

на основе данных моделей из базы
• Дерево контента страницы, заданное

блоками в панели управления
• И блоки (с b- и, в последствии, без b-)
Корпоративный сайт c БЭМ
Корпоративный сайт c БЭМ
Страницы:
• p-* — порядка 50 типов;
• p-b2b-* — порядка 15 типов
Причины:
• Завязка на разделы в базе — в теории, просто сменить;
• Завязка на отрабатываемые модули для разных типов;
• Процесс перехода был безболезненным
Корпоративный сайт c БЭМ
Процесс разработки с БЭМ
• Единое пространство именования;
• Отчуждаемость ux, дизайна, верстки и разработки;
• Снижение сложности кода;
• Возможность быстрого рефакторинга;
• Возможность тестирования отдельных блоков;
• Возможность описания библиотек постепенно
И в целом — нам понравилось (ну мне лично — да).
Процесс сборки MegaFon.ru
blocks/**/*.tmpl + blocks/**/*.deps → deps → *.css, *.js
Отказы переходного периода:
• В коде шаблонов хранятся данные о зависимостях;
• В шаблоны передаются произвольные BEM-деревья;
• Исчезновение глобального скоупа в шаблонах;
• Скрипты на селекторах (jQuery, $__$);
• «А как верстать?» — спрашивала команда;
• В модулях начал расти view-ориентированный код
Еще не приехали?
Хотелки:
• Перенос сборки на полностью статическую (enb?);
• Уход от императивных шаблонизаторов;
• Отдельная технология для создания view-ориентированных
структур (bemtree-like);
И тогда уже можно будет браться за bem-tools 3.0.
Еще не приехали?
Тестирование:
• Стиль кодирования

JSHint, JSCS, LESSlint, php -l, etc.
• Тесты для любых шаблонов (или для всех сразу)

enb-bem-tmpl-specs
• Спеки для бизнес логики блоков и модулей (JS)

enb-bem-specs
• Тесты внешнего вид (через phantomjs или селениум)

gemini
Запуск на post-commit с проверкой измененных файлов
Ссылки
http://bem.info — официальный сайт и форум
http://getbem.com — фан-сайт на английском
http://enb-make.info — про сборщик ENB
http://bit.ly/bemstory-talk — история создания BEM
https://ru.bem.info/forum/issues/158/ — про неBEM
https://ru.bem.info/forum/issues/185/ — обсуждаемая терминология
http://bit.ly/bem-defs — основные понятия БЭМ
http://bit.ly/bem-perf — статья про BEM от Paul Lewis
http://bit.ly/bemhtml-demo — демо работы bemhtml
Процесс сборки MegaFon.ru
blocks/**/*.tmpl + blocks/**/*.deps → deps → *.css, *.js
Отказы переходного периода:
• В коде шаблонов хранятся данные о зависимостях;
• В шаблоны передаются произвольные BEM-деревья;
• Исчезновение глобального скоупа в шаблонах;
• Скрипты на селекторах (jQuery, $__$);
• «А как верстать?» — спрашивала команда;
• В модулях начал расти view-ориентированный код
Вопросы?

More Related Content

What's hot

Beminar js
Beminar jsBeminar js
Beminar jsYandex
 
Presentation
PresentationPresentation
PresentationEfreeti
 
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, ЯндексТема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, Яндексyaevents
 
Мультиязычные проекты - разработка, продвижение, подводные камни #RIW2015
Мультиязычные проекты - разработка, продвижение, подводные камни #RIW2015Мультиязычные проекты - разработка, продвижение, подводные камни #RIW2015
Мультиязычные проекты - разработка, продвижение, подводные камни #RIW2015DevGroupRU
 
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Yandex
 
Методология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияМетодология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияBadoo Development
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьDmitriy Polisadov
 
JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js"
JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js" JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js"
JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js" GeeksLab Odessa
 
Trening modul2-conf3-tema5
Trening modul2-conf3-tema5Trening modul2-conf3-tema5
Trening modul2-conf3-tema5olgaoov
 
BEM — block, element, modification conception
BEM — block, element, modification conceptionBEM — block, element, modification conception
BEM — block, element, modification conceptionVadim Patsev
 

What's hot (14)

Beminar js
Beminar jsBeminar js
Beminar js
 
Presentation
PresentationPresentation
Presentation
 
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, ЯндексТема для WordPress в БЭМ. Владимир Гриненко, Яндекс
Тема для WordPress в БЭМ. Владимир Гриненко, Яндекс
 
Мультиязычные проекты - разработка, продвижение, подводные камни #RIW2015
Мультиязычные проекты - разработка, продвижение, подводные камни #RIW2015Мультиязычные проекты - разработка, продвижение, подводные камни #RIW2015
Мультиязычные проекты - разработка, продвижение, подводные камни #RIW2015
 
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
Владимир Гриненко "i-bem.js: JavaScript в БЭМ-терминах"
 
5 urok
5 urok5 urok
5 urok
 
WepPerfomance,
WepPerfomance, WepPerfomance,
WepPerfomance,
 
Методология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, ОтношенияМетодология: БЭМ, Модули, Отношения
Методология: БЭМ, Модули, Отношения
 
Wordpress theme
Wordpress themeWordpress theme
Wordpress theme
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
 
JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js"
JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js" JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js"
JSLab.Сергей Пузанков. "Разработка небольшого проекта c BEM и node.js"
 
Trening modul2-conf3-tema5
Trening modul2-conf3-tema5Trening modul2-conf3-tema5
Trening modul2-conf3-tema5
 
BEM — block, element, modification conception
BEM — block, element, modification conceptionBEM — block, element, modification conception
BEM — block, element, modification conception
 

Similar to BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда

Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Yandex
 
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компанийАлександр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компанийYandex
 
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Yandex
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Ontico
 
БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природеIhor Zenich
 
Презентация к докладу про БЭМ by Mikhail Troshev
Презентация к докладу про БЭМ  by Mikhail TroshevПрезентация к докладу про БЭМ  by Mikhail Troshev
Презентация к докладу про БЭМ by Mikhail Troshev1 1
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4rit2011
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
Сергей Бережной — bem-core v1.0.0
Сергей Бережной — bem-core v1.0.0Сергей Бережной — bem-core v1.0.0
Сергей Бережной — bem-core v1.0.0Yandex
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
 
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)Ontico
 
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".Badoo Development
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без болиAnton Piskunov
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...GeeksLab Odessa
 
Polymer - New Era of Web Development
Polymer - New Era of Web DevelopmentPolymer - New Era of Web Development
Polymer - New Era of Web DevelopmentAlexander Kirillov
 
Библиотека bem-components — Ангелина Сидорцова, Яндекс
Библиотека bem-components  — Ангелина Сидорцова, ЯндексБиблиотека bem-components  — Ангелина Сидорцова, Яндекс
Библиотека bem-components — Ангелина Сидорцова, ЯндексYandex
 
Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)Mikhail Davydov
 

Similar to BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда (20)

Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
Мастер-класс: Разрабатываем сайт с нуля на полном стеке БЭМ-технологий — Жека...
 
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компанийАлександр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
 
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
Евгений Филатов "Одностраничные приложения на БЭМ и Node.js"
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
БЭМ в дикой природе
БЭМ в дикой природеБЭМ в дикой природе
БЭМ в дикой природе
 
Презентация к докладу про БЭМ by Mikhail Troshev
Презентация к докладу про БЭМ  by Mikhail TroshevПрезентация к докладу про БЭМ  by Mikhail Troshev
Презентация к докладу про БЭМ by Mikhail Troshev
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
WebAssembly
WebAssemblyWebAssembly
WebAssembly
 
Сергей Бережной — bem-core v1.0.0
Сергей Бережной — bem-core v1.0.0Сергей Бережной — bem-core v1.0.0
Сергей Бережной — bem-core v1.0.0
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
Как устроена система перевода в Badoo / Юрий Насретдинов (Badoo)
 
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
Доклад Юрия Насретдинова на РИТ++ 2013. "Система перевода в Badoo".
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
Polymer - New Era of Web Development
Polymer - New Era of Web DevelopmentPolymer - New Era of Web Development
Polymer - New Era of Web Development
 
Библиотека bem-components — Ангелина Сидорцова, Яндекс
Библиотека bem-components  — Ангелина Сидорцова, ЯндексБиблиотека bem-components  — Ангелина Сидорцова, Яндекс
Библиотека bem-components — Ангелина Сидорцова, Яндекс
 
Components now! (in russian)
Components now! (in russian)Components now! (in russian)
Components now! (in russian)
 

More from DALEE digital agency

Как сделать крутую презентацию
Как сделать крутую презентациюКак сделать крутую презентацию
Как сделать крутую презентациюDALEE digital agency
 
Scrum. Чем он может навредить агентству
Scrum. Чем он может навредить агентствуScrum. Чем он может навредить агентству
Scrum. Чем он может навредить агентствуDALEE digital agency
 
Как мы улучшали сайт главного банка страны
Как мы улучшали сайт главного банка страныКак мы улучшали сайт главного банка страны
Как мы улучшали сайт главного банка страныDALEE digital agency
 
Как мы улучшали сайт главного банка страны
Как мы улучшали сайт главного банка страныКак мы улучшали сайт главного банка страны
Как мы улучшали сайт главного банка страныDALEE digital agency
 
Критерии оценки участников тендера
Критерии оценки участников тендераКритерии оценки участников тендера
Критерии оценки участников тендераDALEE digital agency
 
Агентство: инструкция по применению
Агентство: инструкция по применениюАгентство: инструкция по применению
Агентство: инструкция по применениюDALEE digital agency
 
Агентство: кто все эти люди?
Агентство: кто все эти люди?Агентство: кто все эти люди?
Агентство: кто все эти люди?DALEE digital agency
 
Закупка digital-услуг. Постановка проблемы. Тендеры. Пример качественного брифа
Закупка digital-услуг. Постановка проблемы. Тендеры. Пример качественного брифаЗакупка digital-услуг. Постановка проблемы. Тендеры. Пример качественного брифа
Закупка digital-услуг. Постановка проблемы. Тендеры. Пример качественного брифаDALEE digital agency
 
Профессия "Менеджер проектов в digital"
Профессия "Менеджер проектов в digital"Профессия "Менеджер проектов в digital"
Профессия "Менеджер проектов в digital"DALEE digital agency
 
Экономика 
 digital-агентства
Экономика 
 digital-агентстваЭкономика 
 digital-агентства
Экономика 
 digital-агентстваDALEE digital agency
 
Поддержка масштабного сайта усилиями агентств
Поддержка масштабного сайта усилиями агентствПоддержка масштабного сайта усилиями агентств
Поддержка масштабного сайта усилиями агентствDALEE digital agency
 
Опыт реализации и поддержки больших проектов: координация команд, координация...
Опыт реализации и поддержки больших проектов: координация команд, координация...Опыт реализации и поддержки больших проектов: координация команд, координация...
Опыт реализации и поддержки больших проектов: координация команд, координация...DALEE digital agency
 
Как делать крутые слайды
Как делать крутые слайдыКак делать крутые слайды
Как делать крутые слайдыDALEE digital agency
 
Сложный проект для "сложного" клиента
Сложный проект для "сложного" клиентаСложный проект для "сложного" клиента
Сложный проект для "сложного" клиентаDALEE digital agency
 
Критерии оценки креатива
Критерии оценки креативаКритерии оценки креатива
Критерии оценки креативаDALEE digital agency
 
Способы выбора эффективного агентства на digital-услуги
Способы выбора эффективного агентства на digital-услугиСпособы выбора эффективного агентства на digital-услуги
Способы выбора эффективного агентства на digital-услугиDALEE digital agency
 
10 важных вещей digital-медиапланирования
10 важных вещей digital-медиапланирования10 важных вещей digital-медиапланирования
10 важных вещей digital-медиапланированияDALEE digital agency
 
Как думают закупщики?
Как думают закупщики?Как думают закупщики?
Как думают закупщики?DALEE digital agency
 

More from DALEE digital agency (20)

Как сделать крутую презентацию
Как сделать крутую презентациюКак сделать крутую презентацию
Как сделать крутую презентацию
 
Scrum. Чем он может навредить агентству
Scrum. Чем он может навредить агентствуScrum. Чем он может навредить агентству
Scrum. Чем он может навредить агентству
 
Как мы улучшали сайт главного банка страны
Как мы улучшали сайт главного банка страныКак мы улучшали сайт главного банка страны
Как мы улучшали сайт главного банка страны
 
Как мы улучшали сайт главного банка страны
Как мы улучшали сайт главного банка страныКак мы улучшали сайт главного банка страны
Как мы улучшали сайт главного банка страны
 
Критерии оценки участников тендера
Критерии оценки участников тендераКритерии оценки участников тендера
Критерии оценки участников тендера
 
Агентство: инструкция по применению
Агентство: инструкция по применениюАгентство: инструкция по применению
Агентство: инструкция по применению
 
Агентство: кто все эти люди?
Агентство: кто все эти люди?Агентство: кто все эти люди?
Агентство: кто все эти люди?
 
Закупка digital-услуг. Постановка проблемы. Тендеры. Пример качественного брифа
Закупка digital-услуг. Постановка проблемы. Тендеры. Пример качественного брифаЗакупка digital-услуг. Постановка проблемы. Тендеры. Пример качественного брифа
Закупка digital-услуг. Постановка проблемы. Тендеры. Пример качественного брифа
 
Профессия "Менеджер проектов в digital"
Профессия "Менеджер проектов в digital"Профессия "Менеджер проектов в digital"
Профессия "Менеджер проектов в digital"
 
Шаблонизация
ШаблонизацияШаблонизация
Шаблонизация
 
Экономика 
 digital-агентства
Экономика 
 digital-агентстваЭкономика 
 digital-агентства
Экономика 
 digital-агентства
 
Поддержка масштабного сайта усилиями агентств
Поддержка масштабного сайта усилиями агентствПоддержка масштабного сайта усилиями агентств
Поддержка масштабного сайта усилиями агентств
 
Опыт реализации и поддержки больших проектов: координация команд, координация...
Опыт реализации и поддержки больших проектов: координация команд, координация...Опыт реализации и поддержки больших проектов: координация команд, координация...
Опыт реализации и поддержки больших проектов: координация команд, координация...
 
Как делать крутые слайды
Как делать крутые слайдыКак делать крутые слайды
Как делать крутые слайды
 
All About Creative Concept
All About Creative ConceptAll About Creative Concept
All About Creative Concept
 
Сложный проект для "сложного" клиента
Сложный проект для "сложного" клиентаСложный проект для "сложного" клиента
Сложный проект для "сложного" клиента
 
Критерии оценки креатива
Критерии оценки креативаКритерии оценки креатива
Критерии оценки креатива
 
Способы выбора эффективного агентства на digital-услуги
Способы выбора эффективного агентства на digital-услугиСпособы выбора эффективного агентства на digital-услуги
Способы выбора эффективного агентства на digital-услуги
 
10 важных вещей digital-медиапланирования
10 важных вещей digital-медиапланирования10 важных вещей digital-медиапланирования
10 важных вещей digital-медиапланирования
 
Как думают закупщики?
Как думают закупщики?Как думают закупщики?
Как думают закупщики?
 

BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда

  • 1. BEM на корпоративном веб-ресурсе — отказоустойчивость фронтенда Кирилл Лапенин (МегаФон), Алексей Ярошевич (DALEE)
  • 2. Что такое MegaFon.ru Это сайты для: • частных клиентов; • корпоративных клиентов; • операторов связи; • инвесторов; • прессы И 81 региональная версия каждого из них
  • 3. Что  такое  megafon.ru Это более 100 задач на разработку в месяц, более 400 контентных задач в месяц Что такое MegaFon.ru
  • 4. Что  такое  megafon.ru Как поддерживать? Что такое MegaFon.ru
  • 6. Про что ● Про историю, евпаторию, меланхолию ● Про грабли — и что делать, чтобы на них не наступить ● Про что-то, похожее на #b_ ● Про сборку и БЭМ-ориентированность ● Про интеграцию — бесконечный процесс БЭМификации ● Про стек MegaFon.ru и наши былинные отказы ● Про плюшки (и ватрушки) ● Про верную дорогу и светлое будущее
  • 7. Про что ● Про историю, евпаторию, меланхолию ● Про грабли — и что делать, что на них наступить ● Про что-то похожее на #b_ ● Про сборку и БЭМ-ориентированность ● Про интеграцию — бесконечный процесс БЭМификации ● Про стек MegaFon.ru и наши былинные отказы ● Про плюшки (и ватрушки) ● Про верную дорогу и светлое будущее
  • 8. Появление БЭМ «Блоком будем называть фрагмент страницы, который описывается своей разметкой и стилями» «1. никогда не опираться на элементы,
 только на классы;
 2. всем классам внутри блока давать имена, начинающиеся с имени этого блока»
 .b-user b → .b-user__first-letter Доклад @vithar на ClientSide'2007 Лего 1.0, 2008 — разделение по технологиям, ручные @import, префиксы b-, l-, i-, g-, и т.д.
  • 9. Появление БЭМ •Лего 2.0, 2009 — Блоки первичны, технологии вторичны •Выделение БЭМ сущностей: •Блок — это элемент на странице, имеющий значение, имеющий отражение в разных технологиях, включаемых в его файловую структуру. •Элемент — часть блока, не имеющая без него смысла, и тоже состоящая из технологий. •Модификатор — штучка, модифицирующая блок. •Авто-генерация из XML: main.js, main.css, main.xsl.
  • 10. Появление БЭМ Проблема скорости CSS селекторов, 2009 Нотация .b-block__elem_modifier_value
  • 11. Появление БЭМ Open Source, 2010 - Уровни переопределения - Библиотека блоков: bem-bl - Инструменты: bem-tools http://bit.ly/bemstory-talk
  • 12. Появление БЭМ в MegaFon.Ru 7 000 строк CSS. Разве это много?!
  • 13. Появление БЭМ в MegaFon.Ru А если еще 5600? ;-)
  • 14. Не методология БЭМ •«Что-то про CSS?» •Длинные имена классов: btn? → b-button! •Префиксы для классов: b-, i-, g-, js- •Вложенные элементы: nav__item__link •Отсутствие каскадов — никаких .page_theme .link! •Неоправданные каскады: .nav__item .link vs .nav__link •Web Components — близко, но нет •Прозрачность и простота — к сожалению, пока тоже нет
  • 16. Обычный подход и БЭМ Предпосылки для перехода на БЭМ: • Разделение интерфейса на «АНБ»; • Учет весов селекторов; • Осмысленное применение каскадов; • Отделение логики представления от бизнес-логики; • Разнесение общих файлов на модули или плагины; • Команда, высокий BUS-фактор и соглашения; • Инструменты и «предпродажная» подготовка; • Тестирование и документирование, наконец!
  • 17. Обычный подход и БЭМ ПРОЦЕСС РАЗРАБОТКИ ПРОЦЕСС РАЗРАБОТКИ
 БЭМ ДИЗАЙН СТАТИСТИКА ДИНАМИКА ПРОЦЕСС РАЗРАБОТКИ
 БЭМ ДИЗАЙН СТАТИСТИКА ДИНАМИКА ДОКУМЕНТАЦИЯ СЕРВИС БОЛЬШОЙ СЕРВИС
  • 18. Обычный подход и БЭМ Предпосылки для перехода на БЭМ: • Разделение интерфейса на «АНБ»; • Учет весов селекторов; • Осмысленное применение каскадов; • Отделение логики представления от бизнес-логики; • Разнесение общих файлов на модули или плагины; • Команда, высокий BUS-фактор и соглашения; • Инструменты и «предпродажная» подготовка; • Тестирование и документирование, наконец! Обычный подход и БЭМ
  • 19. Методология БЭМ Методология БЭМ — это набор паттернов и способ описывать действительность при помощи кода и размышлять о БЭМ- сущностях; БЭМ-сущность — это определение содержания страницы или сущность в БЭМ-предметной области (блок, элемент); Реализация (в технологии) — функциональная часть БЭМ- сущности, описанная в рамках конкретной технологии файлом или папкой с набором файлов; Технология (tech, technology) — инструкция (или процесс) для преобразования исходных материалов в целевой продукт;
  • 22. Процесс сборки БЭМ-проекта project/bundles/ mnp/ mnp.bemjson.js mnp.bemdecl.js* mnp.bemjson.js: ({ block: 'p-mnp', content: [ { block: 'text', content: 'Введите свой телефон' }, { block: 'phone-input', name: 'msisdn' }, { block: 'button', mods: { type: 'submit' } } ]}) mnp.bemdecl.js: exports.blocks = [ { "name": "p-mnp" }, { "name": "text" }, { "name": "phone-input" }, { "name": "button" } ]; mnp.deps.js: exports.deps = [ { "block": "i-bem" }, { "block": "p-mnp" }, { "block": "text" }, { "block": "phone-input" } ];
  • 25. Процесс сборки MegaFon.ru some.tmpl: <{$tag} {$ibem}> <!-- можно опустить --> <!-- вывод переменной из данных --> <div class="{$b__}title">{$data.title}<div> <!-- вывод внутренних блоков --> <div class="{$b__}content">{$content}</div> <!-- подтянуть блок — не забываем для него css и js --> {b name="b-button" class="`$b__`trigger" tag="a" content="trigger"} </{$tag}>
  • 26. Процесс сборки MegaFon.ru another.tmpl: <!-- перебор всех блоков --> <ul class="{$b__}list"> {foreach from=$content item=b} <li class="{$b__}item"> <!-- динамические вставки блоков ;-( --> {b name=$b.block data=$b.data mods=$b.mods ...} </li> {/foreach} </ul>
  • 27. Процесс сборки MegaFon.ru blocks/**/*.tmpl + blocks/**/*.deps → deps → *.css, *.js Отказы переходного периода: • В коде шаблонов хранятся данные о зависимостях; • В шаблоны передаются произвольные BEM-деревья; • Исчезновение глобального скоупа в шаблонах; • Скрипты на селекторах (jQuery, $__$); • «А как верстать?» — спрашивала команда; • В модулях начал расти view-ориентированный код
  • 28. Процесс сборки MegaFon.ru blocks/**/*.tmpl + blocks/**/*.deps → deps → *.css, *.js Отказы переходного периода: • В коде шаблонов хранятся данные о зависимостях; • В шаблоны передаются произвольные BEM-деревья; • Исчезновение глобального скоупа в шаблонах; • Скрипты на селекторах (jQuery, $__$); • «А как верстать?» — спрашивала команда; • В модулях начал расти view-ориентированный код
  • 29. Корпоративный сайт c БЭМ Интеграция с CMS • Меташаблоны (m-) • Страницы (p-) • Модули и достраивание дерева страницы
 на основе данных моделей из базы • Дерево контента страницы, заданное
 блоками в панели управления • И блоки (с b- и, в последствии, без b-)
  • 31. Корпоративный сайт c БЭМ Страницы: • p-* — порядка 50 типов; • p-b2b-* — порядка 15 типов Причины: • Завязка на разделы в базе — в теории, просто сменить; • Завязка на отрабатываемые модули для разных типов; • Процесс перехода был безболезненным
  • 33. Процесс разработки с БЭМ • Единое пространство именования; • Отчуждаемость ux, дизайна, верстки и разработки; • Снижение сложности кода; • Возможность быстрого рефакторинга; • Возможность тестирования отдельных блоков; • Возможность описания библиотек постепенно И в целом — нам понравилось (ну мне лично — да).
  • 34. Процесс сборки MegaFon.ru blocks/**/*.tmpl + blocks/**/*.deps → deps → *.css, *.js Отказы переходного периода: • В коде шаблонов хранятся данные о зависимостях; • В шаблоны передаются произвольные BEM-деревья; • Исчезновение глобального скоупа в шаблонах; • Скрипты на селекторах (jQuery, $__$); • «А как верстать?» — спрашивала команда; • В модулях начал расти view-ориентированный код
  • 35. Еще не приехали? Хотелки: • Перенос сборки на полностью статическую (enb?); • Уход от императивных шаблонизаторов; • Отдельная технология для создания view-ориентированных структур (bemtree-like); И тогда уже можно будет браться за bem-tools 3.0.
  • 36. Еще не приехали? Тестирование: • Стиль кодирования
 JSHint, JSCS, LESSlint, php -l, etc. • Тесты для любых шаблонов (или для всех сразу)
 enb-bem-tmpl-specs • Спеки для бизнес логики блоков и модулей (JS)
 enb-bem-specs • Тесты внешнего вид (через phantomjs или селениум)
 gemini Запуск на post-commit с проверкой измененных файлов
  • 37. Ссылки http://bem.info — официальный сайт и форум http://getbem.com — фан-сайт на английском http://enb-make.info — про сборщик ENB http://bit.ly/bemstory-talk — история создания BEM https://ru.bem.info/forum/issues/158/ — про неBEM https://ru.bem.info/forum/issues/185/ — обсуждаемая терминология http://bit.ly/bem-defs — основные понятия БЭМ http://bit.ly/bem-perf — статья про BEM от Paul Lewis http://bit.ly/bemhtml-demo — демо работы bemhtml
  • 38. Процесс сборки MegaFon.ru blocks/**/*.tmpl + blocks/**/*.deps → deps → *.css, *.js Отказы переходного периода: • В коде шаблонов хранятся данные о зависимостях; • В шаблоны передаются произвольные BEM-деревья; • Исчезновение глобального скоупа в шаблонах; • Скрипты на селекторах (jQuery, $__$); • «А как верстать?» — спрашивала команда; • В модулях начал расти view-ориентированный код Вопросы?