Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

23
БЭМ глазами бэкенд-разработчика Дмитрий Кушников BEMup в Санкт-Петербурге, 29 ноября 2013 1

description

Мы используем БЭМ для организации фронтенда с самого начала разработки проекта Repka.com. В докладе я расскажу об архитектуре нашего сайта и применяемых на нем технологиях Яндекса, о том, как мы пришли к i-bem, что используем в качестве шаблонизатора, как устроен наш client-side и каковы планы развития на ближайшее будущее. А также разберу плюсы БЭМ с точки зрения бэкенд-разработчика.

Transcript of Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Page 1: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

БЭМ глазами бэкенд-разработчика

Дмитрий КушниковBEMup в Санкт-Петербурге, 29 ноября 2013

=1

Page 2: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

О себе• Бэкенд-разработчик (>12 лет) • Архитектор и ведущий разработчик проекта Репка

=2

Page 3: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

О себе• Бэкенд-разработчик (>12 лет) • Архитектор и ведущий разработчик проекта Репка !Репка (www.repka.com): !• сервис социальной торговли на основе совместных покупок

• проекту 2,5 года (с июня 2011) !• 400K MAU (20K DAU), 200K хитов • 350K товаров

=3

Page 4: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

О проекте

Стек:

=4

Page 5: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Архитектура фронтенда

?=5

Page 6: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Фронтенд без “b_”, файловая структура

Как организовать файловую структуру? !• «Все в кучу»: пишем скрипты и стили

внутри html, который генерируется на сервере;

• «Вынесем кучу в отдельные файлы»: /css/style.css и /js/script.js

• Разделим кучу на логические части: main.css, cart.css, cart.js, login.js

=6

Page 7: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Фронтенд без “b_”, встраивание (injection)

Как встроить необходимые стили и скрипты? Как собирать и версионировать? !• Внутри тегов <script> и <style>; • Собираем в all.css и all.js; • @include / requirejs

=7

Page 8: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Фронтенд без “b_”, верстка + каскад

Как правильно верстать и писать стили? !• спагетти css; • библиотека глобальных стилей

(global.css); • семантика; • css-фреймворки; • .классы или #id

=8

Page 9: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Фронтенд без “b_”, организация JavaScript

Способы инициализации JS • код в html — по мере загрузки • код в dom:ready — после загрузки страницы

=9

Способы работы c JS • развесим события по #id • jQuery-плагины • dojo/extJS виджеты • классы PrototypeJS • MVC на клиенте

Page 10: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Архитектура фронтенда, требования:

а также: • способность легким изменениям • эффективность при росте команды • автоматизация рутинных процессов • способность к автоматическому

тестированию=10

Нужна прозрачная и четкая структура кода (html, css, js)!

Page 11: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Архитектура фронтенда, решение

=11

Page 12: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Архитектура фронтенда, решение

=12

Page 13: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

БЭМ на Репке сегодня

• принцип построения интерфейса по блокам • нотация классов (стандартная b__e_m, с префиксами)

• организация файловой системы • i-bem (JavaScript в BEM-терминах)

=13

Page 14: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Пример интерфейса =14

Page 15: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Как пришли к i-bem

• Было: БЭМ-нотация + Spine (MVC) • В процессе: написали свои хелперы для работы с блоками и элементами !

• Проанализировали: написали часть i-bem • Миграция: контроллеры → декларации

=15

Page 16: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Пример блока (Spine → i-bem)

Было: Стало:

=16

Page 17: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Шаблонизация

• pure PHP и mustache • mustache: есть реализация на PHP • выбор движка: если нужна клиентская —

mustache • mustache на сервере: иногда к нам заходят роботы (им нужен html)

=17

Page 18: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Наш «bem-tools»

• Аналог decl.js — для структуры блоков и зависимостей

• Аналог page.js — для описания зависимостей страницы и сборки ассетов

• Самописный сборщик (Yii/CClientScript)с использованием csso и jsmin

• LESS вместо plain CSS (миксины)=18

Page 19: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Стили блока (LESS) =19

Page 20: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Оценка результата

=20

Page 21: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

БЭМ-методология — «ООП» для фронтенда: • легкость поддержки • повторное использование !БЭМ-инструменты — готовый фреймворк: • готовая архитектура • инструменты для ускорения разработки и избавления от рутины

Выводы для себя (и для других)

=21

Page 22: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Планы по разработке

• Обновление i-bem (bem-bl → bem-core) • Трёхуровневая архитектура

Backend API (PHP) → Frontend (NodeJS) → ClientSide (i-bem)BEMJSON, BEMHTML

• bem-tools

=22

Page 23: Дмитрий Кушников — БЭМ глазами бэкенд-разработчика

Спасибо!Буду рад вопросам.

Дмитрий Кушников, DAS group, проект Репка (http://www.repka.com) [email protected] github.com/dkushnikov @dkushnikov =23