SlideShare a Scribd company logo
Как масштабировать сложный
Single Page Application
1
Алексей Катаев
Что такое Vimbox?
● Уроки / групповые уроки / домашнее задание / тесты
● Видеосвязь
● Синхронизация интерактивных упражнений
● SPA + 14 API
2
Синхронизация упражнений
3
2015
4
2016
5
2017
6
7
● Комната
● Материал
● Слайд
Структура проекта
8
Проблемы
● долгий onboarding
● нужно разбираться во всем проекте
● PR конфликты
9
Модульность
27 атомарных модулей
10
Модули в Vimbox
● Структура модуля
− Компоненты, директивы
− Сервисы (+ API)
− Фильтры
− Роутинг
− Readme.MD
11
Компонент
12
Сервис
13
● Сервис — singleton
● Сервис часто содержит модель
● Примеры сервисов:
- RoomsService — текущая комната
- StepsService — слайды
- ContentService — контент слайдов
Роутинг
● Интуитивное решение:
14
Pub/sub
15
Pub/sub в компонентах
16
● Компонент отображения контента
− onStepChanged — отображать лоадер
− onContentReady — скомпилировать контент
− onStepModeChanged — режим превью
− onTestFinished — отключить редактирование
− ...
Проблемы
● Сложное дерево зависимостей
● Обработка событий в компонентах
● Огромное число состояний
● Синхронизация
● Browser history: https://vimbox.skyeng.ru/lesson
17
Иерархия состояний
18
Роутер
● resolve — async data перед входом в состояние
● onEnter — инициализация моделей
● onExit — возврат моделей в прежнее состояние
● redirectTo — ветвление
19
Роутер
20
Состояние: урок
21
Состояние: материал
22
Состояние: слайд
23
Состояние: контент слайда
24
Простые компоненты
25
Параметры и синхронизация
26
https://vimbox.skyeng.ru/workbook/tutiloba/0/materials?tool=homework
Transition hooks
27
Transition hooks
28
Авторизация и статистика
Особенности решения
● Простая иерархия состояний
● Инициализация моделей в роутере
● Простые компоненты
● Синхронизация
● Transition hooks
29
Onboarding
● Много сотрудников, “текучка”
− долгий onboarding (наставник, устаревшие инструкции)
● Быстрый onboarding
− Первая задача
− Обучающие видео (UX + архитектура)
− Актуальная документация
30
Code-review
● Проблема
− долгие code-review: много замечаний в PR
● Конвенции
− Styleguide + линтеры
− Базовые классы и интерфейсы + АПИ
− Голосование
31
Окружение и CI
32
● Проблемы:
− Установка окружения 3 дня
− Не хватает нужных проектов
33
● Vagrant + provision with
● Регулярные релизы боксов
● Локальные e2e + unit
● CI (project-scoped config)
Окружение и CI
Наши планы
● 10+ человек в команде
● Npm-пакеты
− Core
− GUI
− Video
− Blocks
34
Summary
35
● Live документация
● Конвенции и линтеры
● Обучающие видео
● Быстрое развертывание проектов
Спасибо за внимание
36
Алексей Катаев

More Related Content

PPTX
Vagrant puppet
PDF
JavaScript завтра / Сергей Рубанов (Exante Limited)
PDF
JavaScript завтра
PDF
PDF
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
PDF
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
PDF
Alex Dmitriev презентация для рит (12 14 апреля)
Vagrant puppet
JavaScript завтра / Сергей Рубанов (Exante Limited)
JavaScript завтра
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Alex Dmitriev презентация для рит (12 14 апреля)

What's hot (9)

PDF
Жизнь в изоляции / Роман Дворнов (Avito)
PDF
Проблемы при работе с разными версиями Ruby и разными gem
PDF
Tizen Mobile Application Lifecycle by Kirill Danilov
PDF
Dump-IT Загрузка и инициализация JavaScript
PDF
Фронтенд в Яндексе
PDF
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
PPTX
Docker-контейнеризация: от local до production
PDF
Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)
PDF
Фронтенд в Яндексе
Жизнь в изоляции / Роман Дворнов (Avito)
Проблемы при работе с разными версиями Ruby и разными gem
Tizen Mobile Application Lifecycle by Kirill Danilov
Dump-IT Загрузка и инициализация JavaScript
Фронтенд в Яндексе
Как мы отказались от Skype и внедрили WebRTC на основе janus-gateway / Сергей...
Docker-контейнеризация: от local до production
Онлайн-кинотеатр для SmartTV на веб-технологиях / Михаил Лабанов (Ayyo)
Фронтенд в Яндексе
Ad

Similar to Как масштабировать сложный Single Page Application / Алексей Катаев (Skyeng) (20)

PPT
Владимир Никонов "Вызовы при разработке enterprise продукта"
PDF
стек сетевых сервисов на базе спо
PDF
Meet Magento Belarus 2015: Denis Bosak
PDF
Страх и ненависть в мире релиз-инжиниринга
PDF
Cеминар в Виннице (22.03.2014)
PDF
Знакомьтесь: DITA, Дмитрий Перепелин
PPTX
PHP Anamnes 2015
PDF
Дмитрий Киселев - DrupalSib 2015
PDF
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
PDF
Юрий Василевский «Автоматизация в XCode»
PDF
Юрий Василевский "Автоматизация в XCode"
PPTX
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
DOCX
.NET Development
PDF
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
PDF
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
PDF
Reliable DOM testing with browser-monkey
PDF
Meet Magento Belarus - Andriy Samilyak
PPTX
Net core and linux in production
PDF
Headless Drupal на примере Drupal 8 и React
PDF
Presentation
Владимир Никонов "Вызовы при разработке enterprise продукта"
стек сетевых сервисов на базе спо
Meet Magento Belarus 2015: Denis Bosak
Страх и ненависть в мире релиз-инжиниринга
Cеминар в Виннице (22.03.2014)
Знакомьтесь: DITA, Дмитрий Перепелин
PHP Anamnes 2015
Дмитрий Киселев - DrupalSib 2015
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский "Автоматизация в XCode"
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
.NET Development
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Владимир Русинов, Алексей Капранов "Яндекс.Диск: архитектура, синхронизация и...
Reliable DOM testing with browser-monkey
Meet Magento Belarus - Andriy Samilyak
Net core and linux in production
Headless Drupal на примере Drupal 8 и React
Presentation
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Как масштабировать сложный Single Page Application / Алексей Катаев (Skyeng)