SlideShare a Scribd company logo
1 of 29
Download to read offline
Эволюция клиентской
разработки: от веба ко
«всеобщей мобилизации»
или mobile-first на
примере Badoo
Павел Довбуш
«Простой» веб
● 1 платформа, 0 ⇒ 50 М пользователей
● Логика отображения и шаблонизация на сервере
● HTML по сети
● Переход между страницами - полная перерисовка
● JavaScript - “Ajax и украшения”
«Простой» Веб с точки зрения разработки
● Параллельная разработка
● Договоренности “как делать”, простая “интеграция”
● Узкая специализация
● Хорошо работает при небольшом количестве
человек
Рост + появление мобильных
● Усложнение дизайна и верстки
● Все больше интерактива
● Больше пользователей, новые рынки
Мобильные:
● Эксперементальная команда
● Малая доля трафика, еще меньшая - дохода
● Учимся взаимодействовать с несколькими
платформами
Веб 1.5
● Нужно улучшить user experience
● Делаем одностраничное приложение
● Что переносить на клиент?
○ переводим на API
○ или половинчатое решение
Переход Web 1.0 ⇒ 1.5
Переход Web 1.0 ⇒ 1.5
● Логика отображения и шаблонизация на сервере
● JSON + HTML по сети
● Переход между страницами - перерисовка
фрагментов
● JavaScript - приложение, частично логика
Web 1.5 – Результаты
● Для пользователя:
○ ускорение в ~3 раза
○ kpi ~1 секунда
● Переход ~2 месяца 80% функционала, “хвост”
доделок
● Изменили 20% кода
● Та же структура команд и разработки
Jinba
● Рождение Jinba - нашей системы аналитики и
мониторинга UX
● Доклад RIT/2015: Реалтайм статистика скорости
работы нативных и веб-приложений у реальных
пользователей
https://goo.gl/NARWL1
Мобильные клиенты
● Мобильный трафик растет
● Стабилизировался протокол
● Стандарты и подходы работы между
мобильными командами
Мобильный веб
● Отдельная команда
● Сначала для feature-phone, потом HTML5
● REST+JSON прокси
● Стандартные фреймворки и решения
Рост + превалирование мобильных
● Сайт - Усложнение дизайна и верстки
● Сайт - Все больше интерактива, анимаций,
усложнение логики
● Больше мобильного трафика
● Рост команд и компании
● Распространение Jinba на все платформы
(доклад РИТ 2015 - https://goo.gl/NARWL1)
Протокол
Точка синхронизации между платформами
● Своя надстройка над Google Protocol Buffers
● Строгая типизация и валидация
● Сообщения и команды - описание в одном месте
● Генерация “реализации” для всех платформ
● Версионирование сообщений и полей а не API
● Поддержка десятков версий приложений
Мобильный Веб ⇒ mAPI
● Так ли нужен МобайлВеб прокси?
○ фиксит протокол
○ Protobuf RPC ⇒ REST+JSON
○ немного логики
Переход:
● Генерация JS классов для сообщений
● Высокоуровневая абстракция RPC
● Подробности - доклад
JSConf EU 2014 - http://goo.gl/8AvRgU
Веб 1.5 ⇒ mAPI
● Делаем по два раза
● Усложнение контроля в связи
с ростом команд
● Высокая связность мешает развитию
● Мобильный трафик больше десктопного
Веб 1.5 ⇒ mAPI
Задача:
● Сделать Веб таким же клиентом как мобильные
● Упростить структуру разработки
● Делать функционал один раз, использовать везде
● Перевести фокус на мобильные клиенты
Решение:
● ~1 год работы, изменение структуры разработки
● Повезло - совместили с редизайном
● Сближение с мобильными по функционалу
mAPI команда
● Протокол - язык общения между командами
● Отдельная команда ответственная за протокол
● Документирование изменений на всех
платформах
● Центр - не только технически, но и по процессам
Итого
● Протокол - язык общения между командами
● Первой реализовать фичу может любая
клиентская команда
● Перераспределение разработчиков
○ Бэкенд
○ QA
○ Веб ⇔ Мобайл Веб
● Унификация технологий
● Унификация процесса разработки
Вопросы?
Павел Довбуш
dpp@corp.badoo.com
Протокол
enum Role {
ADMIN = 1;
USER = 2;
}
message User {
required string name = 1;
optional uint32 age = 2;
required Role role = 3;
}
Interface description language
var Role = new GpbEnum();
Role._values = [ 1, 2 ];
Role.ADMIN = 1;
Role.USER = 2;
class User extends GpbMessage {
getName() { … }
setName() { … }
hasName() { … }
getAge() { … }
getRole() { … }
}
var user = new User().setName(‘John’).setAge(30).setRole(Role.USER);
Генарация
классов
new RPC(request_type, parameter)
.on(response_type, callback)
.on([type1, type2], callback)
.request();
Обмен сообщениями
(двусторонний RPC)
RPC.any.on(type3, callback);
request_type & response_type значения enum
MessageType
parameter & response сообщения Protobuf
function callback(err, /** Type1 */ response1) { }
Message exchange
new Rpc(MT.SERVER_GET_USER_LIST,
new ServerGetUserList()
.setFolderId(FolderTypes.FRIENDS))
.on(MT.CLIENT_USER_LIST, onClientUserList)
.request();
function onClientUserList(err, clientUserList) {
var users = clientUserList.getUsers();
users[0].getName();
}
Обмен сообщениями
(двусторонний RPC)
Message exchange

More Related Content

What's hot

параллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерыванияпараллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерыванияAlexey Vidanov
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"Fwdays
 
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерахQA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерахQAFest
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времениAndriy Samilyak
 
"Как дешево переделать традиционное веб-приложение в single-page", Максим Пше...
"Как дешево переделать традиционное веб-приложение в single-page", Максим Пше..."Как дешево переделать традиционное веб-приложение в single-page", Максим Пше...
"Как дешево переделать традиционное веб-приложение в single-page", Максим Пше...MoscowJS
 
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)Evgeny Kaziak
 
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...QAFest
 
AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011CodeCamp
 
стек сетевых сервисов на базе спо
стек сетевых сервисов на базе спостек сетевых сервисов на базе спо
стек сетевых сервисов на базе споEkaterina Morozova
 

What's hot (11)

параллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерыванияпараллельная загрузка Java script и css файлов без прерывания
параллельная загрузка Java script и css файлов без прерывания
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
How to become Famo.us
How to become Famo.usHow to become Famo.us
How to become Famo.us
 
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерахQA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
QA Fest 2016. Татьяна Люлюченко. Немного о мобильных браузерах
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 
website optimization on client side
website optimization on client sidewebsite optimization on client side
website optimization on client side
 
"Как дешево переделать традиционное веб-приложение в single-page", Максим Пше...
"Как дешево переделать традиционное веб-приложение в single-page", Максим Пше..."Как дешево переделать традиционное веб-приложение в single-page", Максим Пше...
"Как дешево переделать традиционное веб-приложение в single-page", Максим Пше...
 
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
 
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
QA Fes 2016. Анна Карпенко. Специфика тестирования мобильных приложений или к...
 
AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011AntonSaburov (Gemini-Systems) @ CodeCamp2011
AntonSaburov (Gemini-Systems) @ CodeCamp2011
 
стек сетевых сервисов на базе спо
стек сетевых сервисов на базе спостек сетевых сервисов на базе спо
стек сетевых сервисов на базе спо
 

Similar to Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-first на примере Badoo

Разработка мобильных приложений на HTML5
Разработка мобильных приложений на HTML5Разработка мобильных приложений на HTML5
Разработка мобильных приложений на HTML5DevDay
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Ontico
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Vadim Martynov
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Ontico
 
PhoneGap + Sencha
PhoneGap + SenchaPhoneGap + Sencha
PhoneGap + Senchaobservleer
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в ЯндексеYandex
 
Тимур Каримбаев (Ютинет.ру)
Тимур Каримбаев (Ютинет.ру)Тимур Каримбаев (Ютинет.ру)
Тимур Каримбаев (Ютинет.ру)Ontico
 
Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Алексей Панфилов
 
Запуск мобильной версии сайта: разбор полетов (Надежда Маринчева, CoMagic)
Запуск мобильной версии сайта: разбор полетов (Надежда Маринчева, CoMagic)Запуск мобильной версии сайта: разбор полетов (Надежда Маринчева, CoMagic)
Запуск мобильной версии сайта: разбор полетов (Надежда Маринчева, CoMagic)NetCampus
 
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...geekfamilyrussia
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Anthony Marchenko
 
Лекции и задания по рнр
Лекции и задания по рнрЛекции и задания по рнр
Лекции и задания по рнрRauan Ibraikhan
 
Мастер-класс: Особенности создания продукта для мобильного веб
Мастер-класс: Особенности создания продукта для мобильного вебМастер-класс: Особенности создания продукта для мобильного веб
Мастер-класс: Особенности создания продукта для мобильного вебTechnosphere1
 
Преимущества создания кроссплатформенных приложений с использованием PhoneGap...
Преимущества создания кроссплатформенных приложений с использованием PhoneGap...Преимущества создания кроссплатформенных приложений с использованием PhoneGap...
Преимущества создания кроссплатформенных приложений с использованием PhoneGap...GoSharp
 
Pavel Ruban. High loaded PHP operations over web interface
Pavel Ruban. High loaded PHP operations over web interfacePavel Ruban. High loaded PHP operations over web interface
Pavel Ruban. High loaded PHP operations over web interfacei20 Group
 

Similar to Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-first на примере Badoo (20)

Разработка мобильных приложений на HTML5
Разработка мобильных приложений на HTML5Разработка мобильных приложений на HTML5
Разработка мобильных приложений на HTML5
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
 
Abbyy ls docflow
Abbyy ls docflowAbbyy ls docflow
Abbyy ls docflow
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
 
PhoneGap + Sencha
PhoneGap + SenchaPhoneGap + Sencha
PhoneGap + Sencha
 
Фронтенд в Яндексе
Фронтенд в ЯндексеФронтенд в Яндексе
Фронтенд в Яндексе
 
Тимур Каримбаев (Ютинет.ру)
Тимур Каримбаев (Ютинет.ру)Тимур Каримбаев (Ютинет.ру)
Тимур Каримбаев (Ютинет.ру)
 
Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)Как не стать заложником одной платформы (MBLTdev)
Как не стать заложником одной платформы (MBLTdev)
 
Запуск мобильной версии сайта: разбор полетов (Надежда Маринчева, CoMagic)
Запуск мобильной версии сайта: разбор полетов (Надежда Маринчева, CoMagic)Запуск мобильной версии сайта: разбор полетов (Надежда Маринчева, CoMagic)
Запуск мобильной версии сайта: разбор полетов (Надежда Маринчева, CoMagic)
 
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...Преимущества создания кроссплатформенных приложений с использованием Phone ga...
Преимущества создания кроссплатформенных приложений с использованием Phone ga...
 
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
Встраивание Python в мобильные приложения – нюансы interoperation, новые подх...
 
Лекции и задания по рнр
Лекции и задания по рнрЛекции и задания по рнр
Лекции и задания по рнр
 
Мастер-класс: Особенности создания продукта для мобильного веб
Мастер-класс: Особенности создания продукта для мобильного вебМастер-класс: Особенности создания продукта для мобильного веб
Мастер-класс: Особенности создания продукта для мобильного веб
 
Abbyy ls docflow
Abbyy ls docflowAbbyy ls docflow
Abbyy ls docflow
 
Преимущества создания кроссплатформенных приложений с использованием PhoneGap...
Преимущества создания кроссплатформенных приложений с использованием PhoneGap...Преимущества создания кроссплатформенных приложений с использованием PhoneGap...
Преимущества создания кроссплатформенных приложений с использованием PhoneGap...
 
Pavel Ruban. High loaded PHP operations over web interface
Pavel Ruban. High loaded PHP operations over web interfacePavel Ruban. High loaded PHP operations over web interface
Pavel Ruban. High loaded PHP operations over web interface
 

Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-first на примере Badoo

  • 1. Эволюция клиентской разработки: от веба ко «всеобщей мобилизации» или mobile-first на примере Badoo Павел Довбуш
  • 2. «Простой» веб ● 1 платформа, 0 ⇒ 50 М пользователей ● Логика отображения и шаблонизация на сервере ● HTML по сети ● Переход между страницами - полная перерисовка ● JavaScript - “Ajax и украшения”
  • 3.
  • 4. «Простой» Веб с точки зрения разработки ● Параллельная разработка ● Договоренности “как делать”, простая “интеграция” ● Узкая специализация ● Хорошо работает при небольшом количестве человек
  • 5. Рост + появление мобильных ● Усложнение дизайна и верстки ● Все больше интерактива ● Больше пользователей, новые рынки Мобильные: ● Эксперементальная команда ● Малая доля трафика, еще меньшая - дохода ● Учимся взаимодействовать с несколькими платформами
  • 6.
  • 7. Веб 1.5 ● Нужно улучшить user experience ● Делаем одностраничное приложение ● Что переносить на клиент? ○ переводим на API ○ или половинчатое решение
  • 9. Переход Web 1.0 ⇒ 1.5 ● Логика отображения и шаблонизация на сервере ● JSON + HTML по сети ● Переход между страницами - перерисовка фрагментов ● JavaScript - приложение, частично логика
  • 10. Web 1.5 – Результаты ● Для пользователя: ○ ускорение в ~3 раза ○ kpi ~1 секунда ● Переход ~2 месяца 80% функционала, “хвост” доделок ● Изменили 20% кода ● Та же структура команд и разработки
  • 11. Jinba ● Рождение Jinba - нашей системы аналитики и мониторинга UX ● Доклад RIT/2015: Реалтайм статистика скорости работы нативных и веб-приложений у реальных пользователей https://goo.gl/NARWL1
  • 12. Мобильные клиенты ● Мобильный трафик растет ● Стабилизировался протокол ● Стандарты и подходы работы между мобильными командами
  • 13.
  • 14. Мобильный веб ● Отдельная команда ● Сначала для feature-phone, потом HTML5 ● REST+JSON прокси ● Стандартные фреймворки и решения
  • 15. Рост + превалирование мобильных ● Сайт - Усложнение дизайна и верстки ● Сайт - Все больше интерактива, анимаций, усложнение логики ● Больше мобильного трафика ● Рост команд и компании ● Распространение Jinba на все платформы (доклад РИТ 2015 - https://goo.gl/NARWL1)
  • 16.
  • 17. Протокол Точка синхронизации между платформами ● Своя надстройка над Google Protocol Buffers ● Строгая типизация и валидация ● Сообщения и команды - описание в одном месте ● Генерация “реализации” для всех платформ ● Версионирование сообщений и полей а не API ● Поддержка десятков версий приложений
  • 18. Мобильный Веб ⇒ mAPI ● Так ли нужен МобайлВеб прокси? ○ фиксит протокол ○ Protobuf RPC ⇒ REST+JSON ○ немного логики Переход: ● Генерация JS классов для сообщений ● Высокоуровневая абстракция RPC ● Подробности - доклад JSConf EU 2014 - http://goo.gl/8AvRgU
  • 19.
  • 20. Веб 1.5 ⇒ mAPI ● Делаем по два раза ● Усложнение контроля в связи с ростом команд ● Высокая связность мешает развитию ● Мобильный трафик больше десктопного
  • 21. Веб 1.5 ⇒ mAPI Задача: ● Сделать Веб таким же клиентом как мобильные ● Упростить структуру разработки ● Делать функционал один раз, использовать везде ● Перевести фокус на мобильные клиенты Решение: ● ~1 год работы, изменение структуры разработки ● Повезло - совместили с редизайном ● Сближение с мобильными по функционалу
  • 22.
  • 23. mAPI команда ● Протокол - язык общения между командами ● Отдельная команда ответственная за протокол ● Документирование изменений на всех платформах ● Центр - не только технически, но и по процессам
  • 24.
  • 25. Итого ● Протокол - язык общения между командами ● Первой реализовать фичу может любая клиентская команда ● Перераспределение разработчиков ○ Бэкенд ○ QA ○ Веб ⇔ Мобайл Веб ● Унификация технологий ● Унификация процесса разработки
  • 27. Протокол enum Role { ADMIN = 1; USER = 2; } message User { required string name = 1; optional uint32 age = 2; required Role role = 3; } Interface description language var Role = new GpbEnum(); Role._values = [ 1, 2 ]; Role.ADMIN = 1; Role.USER = 2; class User extends GpbMessage { getName() { … } setName() { … } hasName() { … } getAge() { … } getRole() { … } } var user = new User().setName(‘John’).setAge(30).setRole(Role.USER); Генарация классов
  • 28. new RPC(request_type, parameter) .on(response_type, callback) .on([type1, type2], callback) .request(); Обмен сообщениями (двусторонний RPC) RPC.any.on(type3, callback); request_type & response_type значения enum MessageType parameter & response сообщения Protobuf function callback(err, /** Type1 */ response1) { } Message exchange
  • 29. new Rpc(MT.SERVER_GET_USER_LIST, new ServerGetUserList() .setFolderId(FolderTypes.FRIENDS)) .on(MT.CLIENT_USER_LIST, onClientUserList) .request(); function onClientUserList(err, clientUserList) { var users = clientUserList.getUsers(); users[0].getName(); } Обмен сообщениями (двусторонний RPC) Message exchange