SlideShare a Scribd company logo
Javascript-
фреймворки:

должен остаться
только один
Сергей Аверин
ПРО ЧТО ДОКЛАД
• Как выбирали новый веб-фреймворк
– Немного о компании
– Бекграунд
– Задача
– Исследование существующего кода
– Выбор на что смотреть
– Техническая оценка вариантов
– Переделка одного из вариантов «под себя»
– Сравнение пилотных проектов
– Оценка затрат на внедрение
2
3
Про компанию
4
МАСШТАБ
• 5 000 000 пользователей
• 500 000 из них — корпоративные
• 700 сотрудников в 17 разных офисах
• Выпускаем много разного софта:
– коробочный под Windows,
– корпоративный с веб-интерфейсами,
– cloud-продукты с веб-интерфейсом.
5
ВЕБ
Все отделы делают веб-часть по-разному
6
Проблема
7
ПРОБЛЕМА
• Много разных технологий для веб-части
• Фронтенд пишут не только JS-разработчики
• Нет возможности подключить к работе верстальщика
• Качество кода сильно отличается
• Текущие технологии устарели
8
Задача
9
КУРС
• Толстый клиент на JS/HTML/CSS
• Единая технология во всей компании
• Библиотека UI-компонентов
• Возможность работать разработчикам разных уровней
• Код должен быть понятен backend-разработчикам
10
Оценка
11
ЧТО ИМЕЕМ?
• Dojo
• Сайт acronis.com — rich-client там не нужен
• Angular 1.x
• RoR+jQuery
• ExtJS 4
12
ЧТО НЕ ТАК С EXTJS?
• Индексная страница документации содержит:
13
395
классов
8 уровней наследования
14
класс с 201 методами
15
16
17
18
~1% DOM-дерева главной
19
Кастомный UI компонент
layouting
20
layouting
21
deep in layouting code…
22
23
deep in layouting code…
Рафик, где мой трафик?
24
Ладно с фреймворком понятно, а
само приложение?
25
ПОЛЕЗЛИ В КОД ПРИЛОЖЕНИЯ
• Мало комментариев
• Жесткая связность
• Нет границы между Controller и View
26
State, BizLogicState, BizLogic State, BizLogic, Ui logic
Model
View
Child View
SubController
SubController2
Child
View
Controller
Server API
М С V
M+CV
27
ПОЛЕЗЛИ В КОД ПРИЛОЖЕНИЯ
• Мало комментариев
• Жесткая связность
• Нет границы между Controller и View
• Publish/Subscribe — вроде как правильный паттерн,

но не работает.
28
29
8 событий, ~18 вызовов
30
ВОПРОС НА ЗАСЫПКУ
Чего обычно нет в коде приложений с жесткой
связностью и плохим разграничением зон
отвественности?
31
32
33
Полезли в код приложения
Выводы…
34
Полезли в код приложения
Выводы…
НАСТОЯЩИЕ ВЫВОДЫ
• Очень сложный фреймворк
• Запутаный получившийся код
• Мегабайты кода
• Нельзя подключить обычных верстальщиков
• Виноват ли фреймворк? — частично
35
КУДА НАПРАВИТЬ УСИЛИЯ?
• нужен проще UI слой
• менее связная архитектура
• четкое разделение зон отвественности (языков,
технологий)
• больше границ и правил для программистов
• и код, в котором просто разобраться
среднестатистическому разработчику.
36
Процесс выбора
37
…ЧТО НАМ ПОДСКАЖЕТ ИНТЕРНЕТ?
«Хорошие художники копируют,
великие художники воруют.»
Пабло Пикассо
38
ЧТО НАМ ПОДСКАЖЕТ ИНТЕРНЕТ?
Angular, backbone, meteor, Ember, polymer, Aurelia,
React, Vue, Mercury, Dojo, Knockback.js, CanJS,
Mithril, Ampersand, Knockout, Flight, TroopJS, Batman,
Spine, YUI, ExtJS, Google Web Toolkit,

Kendo UI, OpenUI5, Webix, Echo3, Enyo
39
GITHUB
40
Кол-во строк кода
Angular
Backbone
Dojo
React
ExtJS
Yahoo UI
Ember
Meteor
Kendo
Polymer
Knockout
0 700 000 1 400 000
КОНФЕРЕНЦИИ 2015
41
0
7,5
15
22,5
30
Кол-во докладов по фреймворкам
Angular React Ember Backbone Polymer Aurelia Meteor
Connect JS, US Frontporch.io, US Midwest JS, US
FullStack, UK WebTech Conference, DE
ТРЕНДЫ
42
ТРЕНДЫ
43
CODEANYWHERE(CLOUD IDE)
44
РЫНОК ВАКАНСИЙ
45
0
125
250
375
500
Angular React Ember Backbone ExtJS Knockout Meteor
Кол-во резюме Кол-во вакансий
ЧТО СМОТРИМ:
• AngularJS
• Ember
• Knockout
• Backbone.js + проекты-расширения
• React + Flux
• Dojo
• ExtJS 6 =)
46
<CUT />: ЧТО НЕ ПОДОШЛО
• Backbone
• Ember
• Knockout
• Dojo
• ExtJS 6
47
• Версия 1.*
• Хорошая модульность
• Нет единого стиля разработки
• Трудно дебажить
• Многовато «магии»
• Сложно интегрировать с новыми технологиями
• Код будет несовместим с версией 2.*
48
Посмотрели 2.*
• Аж три языка — TypeScript, Javascript и Dart.
• Вот это выглядит как то, что надо.
• Сильно лучше версии 1.*
• Окей, надо разбираться…
49
+ Понятный data flow
+ Структурность, понятный data flow,
изолированность компонент
+ Когда-то в будущем будет популярным мейн-
стримом
- Собственные шаблоны с кодом
- Все приложение работает как дерево
компонентов, как таковых Controller’ов нет
- Непонятно, когда же оно зарелизится
50
+ Не фреймворк, а UI-библиотека
+ структурность
+ понятный data flow, изолированность компонент
+ нет какого-то магического синтаксиса (кастомных атрибутов,
фильтров)
+ понятная и простая возможность тюнинга производительности
? и даже серверный рендеринг
51
+ Архитектура, но не фреймворк
+ one-way data flow, синхронная обработка
+ Как приложение делится на независимые блоки с помощью
денормализации — понятно
+ Единый Event Bus (Dispatcher) и уникальные события — круто.
- Как обеспечивается динамика — непонятно
- Смешение концепций — Store’ы и хранят данные и реализуют
бизнес-логику…
52
• Кода от самого Facebook считай, почти нет.
• Посмотрели реальные фреймворки — fluxxor, DeLorean,
ReFlux.js, Este.js:
– уже лучше, но все еще нет динамики
– видно общий прогресс стандартизации в виде ES6, npm-
модулей, изоморфности и т. д.
– с разработкой веб-приложений беда… невозможно,
например, создать два instance’а одного Store’а, чтобы
они не воевали друг с другом.
– нет интернационализации
– нет примеров тестов
53
Попутно прониклись Typescript
54
TYPESCRIPT
Шанс уменьшить «креативность» разработчиков разных отделов
55
КОНТРАКТЫ
56
ИНТЕРФЕЙСЫ
Стандартизирует код + клей между разными частями
приложения
57
А ТАКЖЕ
• Дженерики
• Декораторы
• Составные типы
58
В ИТОГЕ?
• Вопросов стало только больше =)
• «Серебряной пули» нет. В этом плане ExtJS «держит удар».
• Хотим фреймворк с Typescript!
59
Сфокусируемся
60
ВЕРНЕМСЯ К ЗАДАЧЕ
• JS-кодеры должны писать код, верстальщики — делать
шаблоны
• Нужен проще UI слой, понятнее архитектура, четкое
разделение (языков, технологий), больше границ, правил и
стандартов.
• На Typescript
• Не являющийся монолитным монстром все-в-одном
61
ПОРТИРУЕМ FLUX
• Взяли за основу Flux+React фреймворк Este.js, как наиболее
инновационный.
• Плавно переписывали, пока за три захода от него не осталось
ничего, кроме конфига сборщика.
62
Трудности
63
1. STORE’Ы
• Разные зоны ответственности
• Store -> область хранения данных (Store) и отдельно логика
(Controller) (сообразно тому, куда идет развитие Flux)
64
State, BizLogicState, BizLogic State, BizLogic, Ui logic
Model
View
Child View
SubController
SubController2
Child
View
Controller
Server API
М С V
Примерно как было
65
66
Ui logicData BizLogic
Isolated block
Isolated block
Isolated block
Child View
Child View
View
Server API
Store
Store
Store
М С V
ViewView
Child View
Child View
Dispatcher
Controller
SubController2
SubController
Action
Примерно как станет
2. JSX
• JSX — это опять мешанина кода и HTML.
• Обратили внимание на wix-react-templates
• Написали свой похожий
67
68
Шаблон
69
JS-код шаблона
70
UI-компонент
2. JSX
• Появился TSX
• Второй вариант — ограничить применение кода в шаблонах,
создав свои теги в TSX (это JSX в Typesript)
71
3. ДИНАМИКА
• Нет динамического создания Store’ов и View-компонент.
• Как организовать независимую работу двух одинаковых блоков
на одной странице?
72
Что получилось?
73
ПОЛУЧИЛОСЬ:
• Хороший ООП с интерфейсами и дженериками
• С dependency injection
• Только две внешние библиотеки — React и lodash
• Можно поменять что угодно
• С нормальной сборкой
74
Битва «пилотов»
75
vs.6
БИТВА «ПИЛОТОВ»
• Обрезанная копия существующей админки «с нуля»:
– ExtJS 6 + TypeScript
– Flux + React + Typescript
• Сложности:
– анимации
– кастомный скроллбар
– интерфейс меняется для узких экранов
– мобильная версия
– JSON-REST API с авторизацией
76
ЦИФРЫ*
ExtJS6 demo Flux+React demo
PRODUCTION BUILD
JS CODE SIZE
1,45 MB 336 KB
PRODUCTION BUILD
CSS CODE SIZE
345 KB 19.9 kB
# OF HTML DOM NODES 841 301
LOAD TIME
(PRODUCTION, NO CACHE)
1.54 s 0,59 s
LOAD TIME
(PRODUCTION, CACHE)
1.42 s 0,58 s
TIME UNTIL FIRST API REQUEST 0,405 s 0,168 s
JS INIT TIME (GOOGLE CHROME) 0,345 s 0,158 s
PRODUCTION BUILD MEMORY USAGE
(GOOGLE CHROME)
24.2 Mb 11.8 Mb
* В реальном проекте разница в объемах кода и скорости
инициализации будет меньше
77
ПЛАНЫ
• Изучаем 2.0 beta
• Запиливаем первый боевой мини-проект, выбираем, что
лучше
78
Переход
79
ТЕХНОЛОГИЯ МИГРАЦИИ
• Варианты:
– Новые проекты пишем на новом стеке.
– Старый код не трогаем, новый встраиваем целыми
страницами, как iframe.
– При модификации старого кода — или правь, как есть,
или портируй.
80
81
СПАСИБО!
ВОПРОСЫ?
82
@ryba_xek
ryba.xek
Слайды,
предыдущие доклады:
http://averin.ru/slides/
http://slideshare.net/rybaxeks@averin.ru

More Related Content

What's hot

Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
Roman Dvornov
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
ITCrowd Almaty
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
Dmytro Zharii
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Dmytro Zharii
 
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компанийАлександр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Yandex
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
Vladimir Malyk
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
Anton Piskunov
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NET
lugnsk
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Ontico
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Ontico
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
Pavel Chertorogov
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другие
lugnsk
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU
 
Применение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проектеПрименение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проекте
Igor Lubenets
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
buranLcme
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
Alex Tumanoff
 
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Ontico
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
solit
 

What's hot (19)

Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
 
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
SWD Page Recorder: Записывает PageObject'ы со скоростью ниндзя SeleniumCamp 2014
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
 
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компанийАлександр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
Александр Баумгертнер — Преимущества БЭМ для небольших проектов и компаний
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
 
Фронтенд разработка без боли
Фронтенд разработка без болиФронтенд разработка без боли
Фронтенд разработка без боли
 
Opensource на .NET
Opensource на .NETOpensource на .NET
Opensource на .NET
 
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
Microsoft Edge и платформа веб-приложений в Windows 10 / Константин Кичинский...
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
История развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другиеИстория развития и применения CMS: Drupal и другие
История развития и применения CMS: Drupal и другие
 
Tech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест ДжоэлаTech Talks @NSU: Проходим тест Джоэла
Tech Talks @NSU: Проходим тест Джоэла
 
Применение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проектеПрименение CQRS и EventSourcing в DDD-проекте
Применение CQRS и EventSourcing в DDD-проекте
 
Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?Построение собственного JS SDK — зачем и как?
Построение собственного JS SDK — зачем и как?
 
Test driven development in net
Test driven development in netTest driven development in net
Test driven development in net
 
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
 
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко ДмитрийSolit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
 

Similar to SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один

Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Ontico
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
Roman Dvornov
 
WebAssembly
WebAssemblyWebAssembly
WebAssembly
Sergey Rubanov
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
MoscowJS
 
Миграция кода с Magento 1 на Magento 2
Миграция кода с Magento 1 на Magento 2Миграция кода с Magento 1 на Magento 2
Миграция кода с Magento 1 на Magento 2
Elogic Magento Development
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Ontico
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
Denis Tuchin
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
Provectus
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
Dev2Dev
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковAlex Tumanoff
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Ontico
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
Denis Izmaylov
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TKConf
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
DotNetConf
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
Yandex
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
Yandex
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
Denis Izmaylov
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
Anton Ignatov
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
Alexander Syrotenko
 

Similar to SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один (20)

Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
WebAssembly
WebAssemblyWebAssembly
WebAssembly
 
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
 
Миграция кода с Magento 1 на Magento 2
Миграция кода с Magento 1 на Magento 2Миграция кода с Magento 1 на Magento 2
Миграция кода с Magento 1 на Magento 2
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Какой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис ЦыплаковКакой фреймворк нам нужен для Web? Денис Цыплаков
Какой фреймворк нам нужен для Web? Денис Цыплаков
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
webpack: 7 бед - один ответ
webpack: 7 бед - один ответwebpack: 7 бед - один ответ
webpack: 7 бед - один ответ
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Микросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и KubernetesМикросервисная архитектура на базе CoreOS и Kubernetes
Микросервисная архитектура на базе CoreOS и Kubernetes
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 

More from SECON

SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем? SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
SECON
 
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя ВнедрятьSECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON
 
SECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в productionSECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в production
SECON
 
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON
 
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON
 
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компанийSECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON
 
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON
 
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленкеSECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON
 
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигниSECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON
 
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON
 
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON
 
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON
 
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON
 
SECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практикеSECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практике
SECON
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
SECON
 
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проектаSECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON
 
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обученияSECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON
 
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетологаSECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON
 
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателяSECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON
 
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON
 

More from SECON (20)

SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем? SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
SECON'2017, LAZADA Effartlrss Shopping, Как мы тестируем?
 
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя ВнедрятьSECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
SECON'2017, Куприенко Игорь, Университет 4.0: Ждать Нельзя Внедрять
 
SECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в productionSECON'2017, Васильков Василий, Elm в production
SECON'2017, Васильков Василий, Elm в production
 
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
SECON'2017, Емельянов Игорь, Я хочу стать программистом: первые шаги.
 
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступленийSECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
SECON'2017, Тыкушин Анатолий, Болдырев Михаил, Расследование кибер-преступлений
 
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компанийSECON'2017, 	Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
SECON'2017, Рожкова Надежда, Бухгалтерские лайфхаки для IT компаний
 
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
SECON'2017, Янов Альберт, Управленческий учет в компании: для чего он нужен и...
 
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленкеSECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
SECON'2017, Емелина Елена, Управленческий учет в софтверной компании на коленке
 
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигниSECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
SECON'2017, Кузнецов Михаил, Самоуправляемая компания без бюрократии и фигни
 
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
SECON'2017, Коротков Анатолий, #noprojects #nomvp .. куда катится мир?
 
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
SECON'2017, Трошин Алексей, Выжить без менеджера: шаблоны правильных коммуник...
 
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
SECON'2017, Цветцих Денис, Как добавить работе по Agile предсказуемости, не п...
 
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
SECON'2017, Мартынов Антон, Опыт использования удаленных команд при реализаци...
 
SECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практикеSECON'2017, Цаль-Цалко Иван, Go на практике
SECON'2017, Цаль-Цалко Иван, Go на практике
 
SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#SECON'2017, Неволин Роман, Функциональный C#
SECON'2017, Неволин Роман, Функциональный C#
 
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проектаSECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
SECON'2017, Мелехова Анна, Архитектура как стихия. Обуздываем энтропию проекта
 
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обученияSECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
SECON'2017, Макарычев Костантин, Использование Spark для машинного обучения
 
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетологаSECON'2017, Журавлев Денис, Маркетинг без маркетолога
SECON'2017, Журавлев Денис, Маркетинг без маркетолога
 
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателяSECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
SECON'2017, Шатров Михаил, Инструменты успешного предпринимателя
 
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
SECON'2017, Цымбал Дмитрий, Компания - Компания. Дружба на этом уровне.
 

SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один

  • 2. ПРО ЧТО ДОКЛАД • Как выбирали новый веб-фреймворк – Немного о компании – Бекграунд – Задача – Исследование существующего кода – Выбор на что смотреть – Техническая оценка вариантов – Переделка одного из вариантов «под себя» – Сравнение пилотных проектов – Оценка затрат на внедрение 2
  • 3. 3
  • 5. МАСШТАБ • 5 000 000 пользователей • 500 000 из них — корпоративные • 700 сотрудников в 17 разных офисах • Выпускаем много разного софта: – коробочный под Windows, – корпоративный с веб-интерфейсами, – cloud-продукты с веб-интерфейсом. 5
  • 6. ВЕБ Все отделы делают веб-часть по-разному 6
  • 8. ПРОБЛЕМА • Много разных технологий для веб-части • Фронтенд пишут не только JS-разработчики • Нет возможности подключить к работе верстальщика • Качество кода сильно отличается • Текущие технологии устарели 8
  • 10. КУРС • Толстый клиент на JS/HTML/CSS • Единая технология во всей компании • Библиотека UI-компонентов • Возможность работать разработчикам разных уровней • Код должен быть понятен backend-разработчикам 10
  • 12. ЧТО ИМЕЕМ? • Dojo • Сайт acronis.com — rich-client там не нужен • Angular 1.x • RoR+jQuery • ExtJS 4 12
  • 13. ЧТО НЕ ТАК С EXTJS? • Индексная страница документации содержит: 13 395 классов
  • 15. класс с 201 методами 15
  • 16. 16
  • 17. 17
  • 22. deep in layouting code… 22
  • 24. Рафик, где мой трафик? 24
  • 25. Ладно с фреймворком понятно, а само приложение? 25
  • 26. ПОЛЕЗЛИ В КОД ПРИЛОЖЕНИЯ • Мало комментариев • Жесткая связность • Нет границы между Controller и View 26
  • 27. State, BizLogicState, BizLogic State, BizLogic, Ui logic Model View Child View SubController SubController2 Child View Controller Server API М С V M+CV 27
  • 28. ПОЛЕЗЛИ В КОД ПРИЛОЖЕНИЯ • Мало комментариев • Жесткая связность • Нет границы между Controller и View • Publish/Subscribe — вроде как правильный паттерн,
 но не работает. 28
  • 29. 29 8 событий, ~18 вызовов
  • 30. 30
  • 31. ВОПРОС НА ЗАСЫПКУ Чего обычно нет в коде приложений с жесткой связностью и плохим разграничением зон отвественности? 31
  • 32. 32
  • 33. 33 Полезли в код приложения Выводы…
  • 34. 34 Полезли в код приложения Выводы…
  • 35. НАСТОЯЩИЕ ВЫВОДЫ • Очень сложный фреймворк • Запутаный получившийся код • Мегабайты кода • Нельзя подключить обычных верстальщиков • Виноват ли фреймворк? — частично 35
  • 36. КУДА НАПРАВИТЬ УСИЛИЯ? • нужен проще UI слой • менее связная архитектура • четкое разделение зон отвественности (языков, технологий) • больше границ и правил для программистов • и код, в котором просто разобраться среднестатистическому разработчику. 36
  • 38. …ЧТО НАМ ПОДСКАЖЕТ ИНТЕРНЕТ? «Хорошие художники копируют, великие художники воруют.» Пабло Пикассо 38
  • 39. ЧТО НАМ ПОДСКАЖЕТ ИНТЕРНЕТ? Angular, backbone, meteor, Ember, polymer, Aurelia, React, Vue, Mercury, Dojo, Knockback.js, CanJS, Mithril, Ampersand, Knockout, Flight, TroopJS, Batman, Spine, YUI, ExtJS, Google Web Toolkit,
 Kendo UI, OpenUI5, Webix, Echo3, Enyo 39
  • 40. GITHUB 40 Кол-во строк кода Angular Backbone Dojo React ExtJS Yahoo UI Ember Meteor Kendo Polymer Knockout 0 700 000 1 400 000
  • 41. КОНФЕРЕНЦИИ 2015 41 0 7,5 15 22,5 30 Кол-во докладов по фреймворкам Angular React Ember Backbone Polymer Aurelia Meteor Connect JS, US Frontporch.io, US Midwest JS, US FullStack, UK WebTech Conference, DE
  • 45. РЫНОК ВАКАНСИЙ 45 0 125 250 375 500 Angular React Ember Backbone ExtJS Knockout Meteor Кол-во резюме Кол-во вакансий
  • 46. ЧТО СМОТРИМ: • AngularJS • Ember • Knockout • Backbone.js + проекты-расширения • React + Flux • Dojo • ExtJS 6 =) 46
  • 47. <CUT />: ЧТО НЕ ПОДОШЛО • Backbone • Ember • Knockout • Dojo • ExtJS 6 47
  • 48. • Версия 1.* • Хорошая модульность • Нет единого стиля разработки • Трудно дебажить • Многовато «магии» • Сложно интегрировать с новыми технологиями • Код будет несовместим с версией 2.* 48
  • 49. Посмотрели 2.* • Аж три языка — TypeScript, Javascript и Dart. • Вот это выглядит как то, что надо. • Сильно лучше версии 1.* • Окей, надо разбираться… 49
  • 50. + Понятный data flow + Структурность, понятный data flow, изолированность компонент + Когда-то в будущем будет популярным мейн- стримом - Собственные шаблоны с кодом - Все приложение работает как дерево компонентов, как таковых Controller’ов нет - Непонятно, когда же оно зарелизится 50
  • 51. + Не фреймворк, а UI-библиотека + структурность + понятный data flow, изолированность компонент + нет какого-то магического синтаксиса (кастомных атрибутов, фильтров) + понятная и простая возможность тюнинга производительности ? и даже серверный рендеринг 51
  • 52. + Архитектура, но не фреймворк + one-way data flow, синхронная обработка + Как приложение делится на независимые блоки с помощью денормализации — понятно + Единый Event Bus (Dispatcher) и уникальные события — круто. - Как обеспечивается динамика — непонятно - Смешение концепций — Store’ы и хранят данные и реализуют бизнес-логику… 52
  • 53. • Кода от самого Facebook считай, почти нет. • Посмотрели реальные фреймворки — fluxxor, DeLorean, ReFlux.js, Este.js: – уже лучше, но все еще нет динамики – видно общий прогресс стандартизации в виде ES6, npm- модулей, изоморфности и т. д. – с разработкой веб-приложений беда… невозможно, например, создать два instance’а одного Store’а, чтобы они не воевали друг с другом. – нет интернационализации – нет примеров тестов 53
  • 55. TYPESCRIPT Шанс уменьшить «креативность» разработчиков разных отделов 55
  • 57. ИНТЕРФЕЙСЫ Стандартизирует код + клей между разными частями приложения 57
  • 58. А ТАКЖЕ • Дженерики • Декораторы • Составные типы 58
  • 59. В ИТОГЕ? • Вопросов стало только больше =) • «Серебряной пули» нет. В этом плане ExtJS «держит удар». • Хотим фреймворк с Typescript! 59
  • 61. ВЕРНЕМСЯ К ЗАДАЧЕ • JS-кодеры должны писать код, верстальщики — делать шаблоны • Нужен проще UI слой, понятнее архитектура, четкое разделение (языков, технологий), больше границ, правил и стандартов. • На Typescript • Не являющийся монолитным монстром все-в-одном 61
  • 62. ПОРТИРУЕМ FLUX • Взяли за основу Flux+React фреймворк Este.js, как наиболее инновационный. • Плавно переписывали, пока за три захода от него не осталось ничего, кроме конфига сборщика. 62
  • 64. 1. STORE’Ы • Разные зоны ответственности • Store -> область хранения данных (Store) и отдельно логика (Controller) (сообразно тому, куда идет развитие Flux) 64
  • 65. State, BizLogicState, BizLogic State, BizLogic, Ui logic Model View Child View SubController SubController2 Child View Controller Server API М С V Примерно как было 65
  • 66. 66 Ui logicData BizLogic Isolated block Isolated block Isolated block Child View Child View View Server API Store Store Store М С V ViewView Child View Child View Dispatcher Controller SubController2 SubController Action Примерно как станет
  • 67. 2. JSX • JSX — это опять мешанина кода и HTML. • Обратили внимание на wix-react-templates • Написали свой похожий 67
  • 71. 2. JSX • Появился TSX • Второй вариант — ограничить применение кода в шаблонах, создав свои теги в TSX (это JSX в Typesript) 71
  • 72. 3. ДИНАМИКА • Нет динамического создания Store’ов и View-компонент. • Как организовать независимую работу двух одинаковых блоков на одной странице? 72
  • 74. ПОЛУЧИЛОСЬ: • Хороший ООП с интерфейсами и дженериками • С dependency injection • Только две внешние библиотеки — React и lodash • Можно поменять что угодно • С нормальной сборкой 74
  • 76. БИТВА «ПИЛОТОВ» • Обрезанная копия существующей админки «с нуля»: – ExtJS 6 + TypeScript – Flux + React + Typescript • Сложности: – анимации – кастомный скроллбар – интерфейс меняется для узких экранов – мобильная версия – JSON-REST API с авторизацией 76
  • 77. ЦИФРЫ* ExtJS6 demo Flux+React demo PRODUCTION BUILD JS CODE SIZE 1,45 MB 336 KB PRODUCTION BUILD CSS CODE SIZE 345 KB 19.9 kB # OF HTML DOM NODES 841 301 LOAD TIME (PRODUCTION, NO CACHE) 1.54 s 0,59 s LOAD TIME (PRODUCTION, CACHE) 1.42 s 0,58 s TIME UNTIL FIRST API REQUEST 0,405 s 0,168 s JS INIT TIME (GOOGLE CHROME) 0,345 s 0,158 s PRODUCTION BUILD MEMORY USAGE (GOOGLE CHROME) 24.2 Mb 11.8 Mb * В реальном проекте разница в объемах кода и скорости инициализации будет меньше 77
  • 78. ПЛАНЫ • Изучаем 2.0 beta • Запиливаем первый боевой мини-проект, выбираем, что лучше 78
  • 80. ТЕХНОЛОГИЯ МИГРАЦИИ • Варианты: – Новые проекты пишем на новом стеке. – Старый код не трогаем, новый встраиваем целыми страницами, как iframe. – При модификации старого кода — или правь, как есть, или портируй. 80
  • 81. 81