Больше десяти лет Яндекс делает разные интернет-сервисы: Карты, Почту, Директ, Музыку, Авто и так далее. В процессе их разработки был приобретён опыт, который может быть полезен другим веб-разработчикам. В докладе мы расскажем несколько историй на примере некоторых сервисов Яндекса и общей библиотеки блоков. В контексте поисковых сервисов, речь пойдёт об использовании полного стека БЭМ-технологий, о переходе к серверному JavaScript и автоматизации разработки. Мы опишем опыт Яндекс.Директа, фронтенд которого переписывается без остановки основной разработки. А также расскажем про реализацию MVC-паттерна (bem-mvc) и преобразование данных в удобный для представления вид. На примере Яндекс.Карт и их API будет показано, как можно гибко адаптировать БЭМ-методологию, учитывая особые нужды конкретного проекта. Мы также расскажем, зачем мы пошли в опенсорс и чему научились. Обещаем много интересных подробностей.
6. yandex.ru/all — больше 40 сервисов
api.yandex.ru — больше 25 API
на самом деле 180 сервисов
более 250 разработчиков интерфейсов
3 страны
6 городов
кодовая база 001011000100100001111000110
6
43. Яндекс.Директ
43
Сервис для размещения поисковой
и тематической контекстной
рекламы.
Проект с 12-ти летней историей,
сложносочиненным интерфейсом,
большой кодовой базой.
53. Планирование
Для начала, для страниц
посчитали посещаемость
дали коэффициент важности
составили таблицу
Выбираем
смотрим важность
смотрим трудоемкость
количество общих блоков
53
67. bem-mvc – реализация MVC паттерна осуществляющего
провязку с DOM-ом в БЭМ-терминах
http://github.com/bem/bem-mvc
Подробнее на BEMup
67
68. Кроме того
68
Ввели обязательное code review
Синтаксический анализ (jshint, jscs)
Пишем json-схемы на данные json-schema.org
Валидируем данные по этим схемам
Исследуем скорость интерфейса
82. Обратная совместимость
API — зафиксированный набор интерфейсов
Вместо доопределений — параметры блока
Нет модификаторов
Отображение блока отделено от поведения
82
86. BT
Шаблонизатор для BTJSON.
Не поддерживает доопределение, переопределение.
Работает очень быстро за счет своей простоты.
github.com/enb-make/bt
86
89. YBlock
// i-bem
BEM.DOM.decl("button", { ... });
var button = BEM.DOM.init(
$(BEMHTML.apply({block: "button"}))
).bem("button");
// YBlock
var Button = inherit(YBlock, { ... });
var button = new Button();
89
90. YBlock
Ориентирован на проекты с упором на JS
Полное разграничение публичного и приватного API
Связан с BT
Чистое наследование, совместимое с различными библиотеками
90
91. Наши технологии
BTJSON — диалект BEMJSON
BT — шаблонизатор
YBlock — базовый визуальный блок
ENB — сборщик. Подробнее на BEMup.
91
101. А точнее?
bem.info БЭМ-методология bem-core БЭМ-технологии
bem-tools Москва bem-history СНГbem-mvc РИТ++ Киев bem-bl
Я.Субботники i-bem.js YaC Симферополь twitter Web Standards
Days Клуб БЭМ в Я.Ру borschik in English facebook по-русски
WebConf ЕвропаМинск bemhtml Санкт-Петербург
~30 докладов в год
100
104. 103
«Когда я спросил Харисова на Я.Субботнике в
2009 (я тогда в Яндексе не работал), почему они
бесплатно рассказывают и выкладывают
наработки, он ответил: „Когда делаешь что-то
долго и хорошо, со временем появляется желание
поделиться“»,
— из разговора с одним
неизвестным Лего-разработчиком
105. БЭМ — первый технологический
продукт Яндекса
104
109. Зачем нам опенсорс?
105
Закрытая разработка рано или поздно умирает
Нужна новая кровь
Хотим аутсорс, но сложно интегрировать код
110. Зачем нам опенсорс?
105
Закрытая разработка рано или поздно умирает
Нужна новая кровь
Хотим аутсорс, но сложно интегрировать код
Хотим расти, но сложно интегрировать людей
111. Зачем нам опенсорс?
105
Закрытая разработка рано или поздно умирает
Нужна новая кровь
Хотим аутсорс, но сложно интегрировать код
Хотим расти, но сложно интегрировать людей
Хотим делиться, потому что вместе веселей
115. Приоритезируй это!
Online vs. Offline
Внедрение vs. Распространение знания
Написание кода vs. Знание методологии
106
116. Приоритезируй это!
Online vs. Offline
Внедрение vs. Распространение знания
Написание кода vs. Знание методологии
Наше коммьюнити vs. Какие-то конференции
106
128. «Не бойтесь быть первопроходцами.
Худшее, что может случиться, — вы опозоритесь и все!»
— Дима Барановский, Adobe на YaC 2012
118
129. Stay BEMed & Приходи на BEMup!
119
15:00 Дмитрий Барановский — topcoat — открытый проект от Адобе для
быстрой и удобной разработки веб- приложений
15:30 Антон Виноградов — БЭМ on Rails
16:00 Марат Дулин — ENB — сборщик проектов на БЭМ
16:20 Сергей Татаринцев — bem-tools 1.0.0
16:40 Сергей Бережной — bem-core
17:20 Сергей Максимов — BEMTREE.XJST – генерируй дерево
17:40 Владимир Варанкин — Сервер-сайд в БЭМ- терминах (Node.js)
18:00 Сергей Пузанков — Новый Поиск по Блогам на bem- node
18:20 Сергей Максимов — bem-mvc, или как клеить моделей
18:40 Владимир Довыденко — БЭМ в ТКС
19:00 Антон Кузнецов — БЭМ в Битриксе
19:20 Александр Баумгертнер — Плюсы использования БЭМ для небольших
проектов и компаний