javascript сегодня: react, redux и новая реальность
Post on 16-Apr-2017
1.312 Views
Preview:
TRANSCRIPT
JavaScript сегодня: React, Redux и новая реальностьДенис Измайлов
15 марта 2016
Денис Измайлов• 16 лет опыта разработки ПО и web
• Последние 6 лет посвятил Front-end, Node.js и архитектуре
• Более 15 проектов, в том числе много SPA, high-load и React
• Коммиты в Redux, webpack и koa
• Cпикер HighLoad++ 2015, MoscowJS
• Автор статей на Habrahabr и англоязычных ресурсах
, CEO
Most Popular
«Результаты ежегодного исследования StackOverflow — про технологии, зарплаты, счастье и кофе», http://habrahabr.ru/post/255717/
4
Most Popular
http://www.ryan-williams.net/hacker-news-hiring-trends/2016/march.html?compare1=java&compare2=node.js&compare3=JavaScript&compare4=golang
5
JavaScriptrules the web
Почему необходимо использовать актуальные
технологии?
Что произошлоза эти 2 года
в мире JavaScript?
Какие тренды мы видим сегодня?
Front-end сегодня• Это не только JavaScript в браузере
• Сегодня Front-end - клиент и сервер:
10
Front-end клиент
Front-end сервер
Back-end сервер
Database
Java Legacy
etc
Front-end сегодня• Это не только JavaScript в браузере
• Сегодня Front-end - клиент и сервер:
11
Front-end клиент
Front-end сервер
Back-end сервер
Database
Java Legacy
etc
Front-end сегодня• Это не только JavaScript в браузере
• Сегодня Front-end - клиент и сервер:
12
Front-end клиент
Front-end сервер
Back-end сервер
Database
Java Legacy
etc
- HTML - [critical CSS] - JS Bundle
Front-end сегодня• Это не только JavaScript в браузере
• Сегодня Front-end - клиент и сервер:
13
Front-end клиент
Front-end сервер
Back-end сервер
Database
Java Legacy
etc
- HTML - [critical CSS] - JS Bundle
Front-end сегодня• Это не только JavaScript в браузере
• Сегодня Front-end - клиент и сервер:
14
Front-end клиент
Front-end сервер
Back-end сервер
Database
Java Legacy
etc
- HTML - [critical CSS] - JS Bundle
Front-end сегодня• Это не только JavaScript в браузере
• Сегодня Front-end - клиент и сервер:
15
Front-end сегодня• Это не только JavaScript в браузере
• Сегодня Front-end - клиент и сервер:
16
Front-end сегодня• Это не только JavaScript в браузере
• Сегодня Front-end - клиент и сервер:
17
SPA
JavaScript на сервере• Представлен Node.js
• Экосистема - npm (Node.js Package Manager)
• Что такое npm?251 К пакетов, ~ 4 млрд. загрузок/мес.
18
https://unpm.nodesource.com/
Мир JavaScript - это самый увлекательный сериал
Мир JavaScript - это самый увлекательный сериал
• 2014: React = HTML в JavaScript?
• 2015: React - то, с чем стало всё проще
• 2014: Flux - как его внедрить?
• 2015: Flux - RIP, viva la Redux
20
2014
2014: Server-Side1. Node.js в Production -> развитие платформы
стало замедляться (Joyent страхует риски)
22
2014: Server-Side1. Node.js в Production -> развитие платформы
стало замедляться (Joyent страхует риски)
2. Node.js для сборки SPA
23
2014: Server-Side1. Node.js в Production -> развитие платформы
стало замедляться (Joyent страхует риски)
2. Node.js для сборки SPA
3. Require.js (AMD) -> Browserify (CommonJS) + BrowserSync/Watchify
24
2014: Server-Side1. Node.js в Production -> развитие платформы
стало замедляться (Joyent страхует риски)
2. Node.js для сборки SPA
3. Require.js (AMD) -> Browserify (CommonJS) + BrowserSync/Watchify
4. 27 ноября 2014, доклад «webpack: 7 бед - один ответ» на MoscowJS 17:hHps://www.youtube.com/watch?v=kuXIgUsvpLo
5. Статья на Хабрахабр про webpack:hHp://habrahabr.ru/post/245991/
25
2014: Client-Side1. В проектах сражаются за доминирование:
Angular, Knockout, jQuery, Backbone, Handlebars
2. Благодаря сборщикам, от чистого CSS уходят: LESS, SASS, Stylus
3. ...
26
2014: Client-Side1. В проектах сражаются за доминирование:
Angular, Knockout, jQuery, Backbone, Handlebars
2. Благодаря сборщикам, от чистого CSS уходят: LESS, SASS, Stylus
3. ...
27
2014: Client-Side1. В проектах сражаются за доминирование:
Angular, Knockout, jQuery, Backbone, Handlebars
28
1. Низкая структурированность
2. Медленное обновление UI
3. Side Effects
4. Много [ООП] кода и шаблонов
React
JavaScript-библиотека для создания UI
React1. Просто “V” в паттерне MVC + Specs and Lifecycle
31
React Lifecycle
32* - om
React1. Просто “V” в паттерне MVC + Specs and Lifecycle
2. Скорость обновления UI:
1. точечные и пакетные обновления
2. виртуальный DOM
33
React DOM Diff
34
React1. Просто “V” в паттерне MVC + Specs and Lifecycle
2. Скорость обновления UI:
1. точечные и пакетные обновления
2. виртуальный DOM
3. Отсутствие Side Effects:
1. однонаправленный Data Flow (props)
2. неизменяемые данные (state)
35
React Flow
36
React
UI = f(x), x = state, f = component
React1. Просто “V” в паттерне MVC + Specs and Lifecycle
2. Скорость обновления UI:
1. точечные и пакетные обновления
2. виртуальный DOM
3. Отсутствие Side Effects:
1. однонаправленный Data Flow (props)
2. неизменяемые данные (state)
4. Удобство разработки - JSX
38
React Component
39
React1. Просто “V” в паттерне MVC + Specs and Lifecycle
2. Скорость обновления UI
3. Отсутствие Side Effects
4. Удобство разработки - JSX
40
2014: Client-Side1. В проектах сражаются за доминирование:
Angular, Knockout, jQuery, Backbone, Handlebars
41
1. Низкая структурированность
2. Медленное обновление UI
3. Side Effects
4. Много [ООП] кода и шаблонов
SOLVED BY
REACT
2014: Client-Side1. В проектах сражаются за доминирование:
Angular, Knockout, jQuery, Backbone, Handlebars
2. Благодаря сборщикам, от чистого CSS уходят: LESS, SASS, Stylus
3. Большинство всё ещё скептически посматривает на React:
• HTML-код в JavaScript? PHP way? • Ещё один Angular? • А куда Backbone тут?
42
2014: Client-Side
• 30 апреля 2014 • Сан-Франциско • 30ºC • 1700 разработчиков • F8 Facebook Developer Conference
Проблема масштабирования MVC
30 апреля 2014, Сан-Франциско F8 Facebook Developer Conference
45
30 апреля 2014, Сан-Франциско F8 Facebook Developer Conference
Command-Query Responsibility Segregation
CQRS46
CQRSCommand-Query Responsibility Segregation
модельдля чтения и записи
47
CQRSCommand-Query Responsibility Segregation
модель для чтенияданных
модельдля чтения и записи
модель для записиданных
48
Что даёт Flux?
1. Состояние гонки (race condition)
2. Каскадные обновления (cascade
updates)
3. Воспроизводимость состояний
49
Что даёт Flux?
1. Состояние гонки (race condition)
2. Каскадные обновления (cascade
updates)
3. Воспроизводимость состояний
50
Воспроизводимость состояний
51
Atime
Воспроизводимость состояний
52
A B
Воспроизводимость состояний
53
A B
A B
Воспроизводимость состояний
54
A E
A E
Воспроизводимость состояний
55
A E
A E
Record / Replay
Time Traveling
2014: Client-Side4. Flux, как альтернатива MVC и архитектура для
React-приложений
5. Это помогло немного иначе посмотреть на React
6. Гонка Flux-фреймворков: Fluxxor, Reflux.js, Flux от Facebook, Flummox, Marty.js, Fluxible от Yahoo, AirBnb представляет alt
7. Было трудно, но понятно, что React и Flux - это верное направление
8. ES6-транспилеры 6to5, esnext, traceur начали вытеснять CoffeeScript и пр.
56
2015
2015: Server-Side1. 14 января выходит io.js:
форк Node.js с болееновым V8 с частичным ES6 - промисы, генераторы
2. 8 сентября вышел Node.js v4.0.0
3. Волна удаления gulp из процесса сборки с заменой на отдельные скрипты в npm scripts
4. Изоморфные приложения58
2015: Client-Side1. Пришёл ES6, 15 февраля - Babel (6to5 + esnext)
2. React Native
3. Взлёт популярности PostCSS
4. webpack стал стандартом де-факто в проектах
5. React почти полностью вытеснил Angular 1.x
6. Гонка Flux-реализаций окончена сокрушительной победой Redux
59
2015: Client-Side1. Пришёл ES6, 15 февраля - Babel (6to5 + esnext)
2. React Native
3. Взлёт популярности PostCSS
4. webpack стал стандартом де-факто в проектах
5. React почти полностью вытеснил Angular 1.x
6. Гонка Flux-реализаций окончена сокрушительной победой Redux
60
Проблемы Flux
Проблемы Flux
1. Обилие boilerplate-кода
2. “Заточенность" кода приложения под API каждого Flux-фреймворка
3. Логика сторов связана с их состоянием
62
Пара примеров с alt.js
Создание Store
64
Создание Store
65
полезная часть
Создание компонент
66
Создание компонент
67
бесполезнаячасть
Проблемы Flux
1. Обилие boilerplate-кода
2. “Заточенность" кода приложения под API каждого Flux-фреймворка
3. Логика сторов связана с их состоянием
4. Сложность сделать Record/Replay
5. Сложность для понимания роль диспетчера
68
Проблемы Flux
69
Store
ДиспетчерAction 1
Компонент
Проблемы Flux
70
Store
ДиспетчерAction 1
Action 2
Компонент
Проблемы Flux
71
Store
ДиспетчерAction 1
Action 2
Uncaught Error: Invariant Violation: Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.
Компонент
Проблемы Flux
hHps://github.com/facebook/flux/issues/47
Как эти проблемырешает Redux?
ООП -> ФП
Reducers
75
Middleware
76
View Provider
77
Доступ к данным из React, Angular и пр.
Connector
78
Redux
Будет ли ещё один Redux?
Hype Cycle
81
React + Redux: Plateau of Productivity
А что тогда будет?
2016 Тренды
Качественный рост экосистемы React + Redux
React - не просто V в MVC
React - экосистема
Redux - экосистема
Рост экосистемы React + Redux1. Библиотеки компонентов
• Elemental UI
89
Elemental UI
Рост экосистемы React + Redux1. Библиотеки компонентов
• Elemental UI
• Material-UI
91
Material-UI
Рост экосистемы React + Redux1. Библиотеки компонентов
• Elemental UI
• Material-UI
• TouchstoneJS
93
TouchstoneJS
Рост экосистемы React + Redux1. Библиотеки компонентов
• Elemental UI
• Material-UI
• TouchstoneJS
• reapp
95
reapp
Рост экосистемы React + Redux1. Библиотеки компонентов
• Elemental UI
• Material-UI
• TouchstoneJS
• reapp
2. Инструменты для Redux
97
Redux Dev Tools1. Live Edit
2. Time Travel
Redux Slider Monitor1. Time Travel
через слайдер
Redux Diff Monitor
Redux GenTest Plugin
Рост экосистемы React + Redux1. Библиотеки компонентов
• Elemental UI
• Material-UI
• TouchstoneJS
• reapp
2. Инструменты для Redux
3. Анимация (react-motion, velocity-react, etc)
4. CSS Modules & Post CSS
102
Борьба библиотек для работы с данными
и offline-режима
Работа с данными и offline
1. Facebook Relay
2. Netflix Falcor
3. om.next
4. PouchDB, etc
5. hHp://blog.yld.io/2015/11/30/building-realtime-
collaborative-offline-first-apps-with-react-redux-
pouchdb-and-web-sockets/
104
GraphQL + Relay
До GraphQL
106
До GraphQL
107
1. Где реализовать загрузку данных?
2. Как реализовать Optimistic Updates?
3. Чем оптимизировать сетевой трафик?
GraphQL Example
GraphQL Applications
GraphQL Schema
Вместе с GraphQL
111
1. Optimistic Updates
2. Query Collocation
3. Кэширование
4. Автоматический Data-Fetching,прощай AJAX
Relay Way1. Прощаемся:
1. Service-Oriented Architecture
2. Imperative Data Fetching
2. Встречаем:
1. User Experience Oriented Architecture
2. Declarative Data Fetching
112
Relay Way1. Прощаемся:
1. Service-Oriented Architecture
2. Imperative Data Fetching
2. Встречаем:
1. User Experience Oriented Architecture
2. Declarative Data Fetching
113
Relay + React Native
114
Давление на React со стороны Angular 2
Функциональное программирование
+ Иммутабельные
данные
Функциональное
1. Ph. D
2. UI = f(x), x = state(action1, action2, ...actionN)
3. Ramda
4. Professor Frisby's Mostly Adequate Guide to Functional
ProgramminghHps://drboolean.gitbooks.io/mostly-adequate-guide/
content/
5. Fantasy Land SpecificationhHps://github.com/fantasyland/fantasy-land
118
Изоморфные приложения
Изоморфные приложения
By isomorphic we mean that any given line of code (with notable exceptions) can execute both on the client and the server.
Charlie Robbins,18 Oct 2011
Шаблоны
Стили
Локализация
Конфигурация
Routes
Права доступа
Модели
Схемы
Валидация
Сервисы
Изоморфные приложения
server.jsNode.js
worker.js
client.jsBrowser
admin.js
Бизнес-логика
Компоненты
API-интерфейсы
Actions, Reducers
Static Files
Server-Side Rendering• Сборка HTML на Front-end сервере
• Моментальное отображение в
браузере, ещё до загрузки JS
• Когда JS загрузится, React только
добавит обработчики событий
• А это очень быстро122
Server-Side Rendering1. Пользователь видит страницу
мгновенно
2. Отсутствие дополнительных запросов на получение данных
3. Страница может работать даже без JS
4. Полноценная URL-навигация и мета-тэги
5. Сохранение всех возможностей современного JavaScript
123
Изоморфные приложения1. Redux: the best for isomorphic apps
hHps://www.youtube.com/watch?
v=Uyk_8WWna6s
2. Изоморфные React-приложения:
производительность и масштабированиеhHp://www.highload.ru/2015/abstracts/1962.html
3. Изоморфные React-приложенияhHp://www.youtube.com/watch?v=PbK5xLmS0MU
124
Native Applications
Native Applications1. Electron
126
Slack
Native Applications1. Electron
2. React Native
130
SVG + D3.js
WebAssembly, WebGL
C++ add-ons -> Node.js
Обучение и профессиональная сертификация
Node.js -> Enterprise
StrongLoop -> IBM
Docker-контейнеры
Docker + CoreOS
138
Систематизация Workflow
Систематизация Workflow1. jsdoc 3, GitBook, documentation.js
2. JSON API, GraphQL
3. BitBucket, GitHub, Gogs
4. CI (CodeShip, Travis, Circle)
5. Docker (Heroku, DigitalOcean, vscale)
6. StrongLoop, PM2, Enterprise NPM
7. Slack, Fleep, etc
140
GitBook
documentation.js
Итоги
20161. Качественный рост экосистем React и Redux
2. Библиотеки работы с данными (Facebook Relay, Falcor, etc) и поддержкой offline-режима
3. Давление на React-сообщество со стороны Angular 2
4. Функциональное программирование, иммутабельные данные
5. Изоморфные приложения
6. Native Applications (Desktop & Mobile)144
20167. SVG & D3.js
8. WebAssembly, WebGL
9. C++ + JavaScript
10. Проекты обучения и профессиональной сертификации (egghead.io, etc)
11. React и Node.js активно входят в Enterprise
12. Микросервисная архитектура и контейнеры (Docker)
13. Систематизация Workflow145
Какие тренды мы видим сегодня?
Что произошлоза эти 2 года
в мире JavaScript?
Почему необходимо использовать актуальные
технологии?
Как поддерживать актуальность?
Процесс
1. Осведомлённость (10% времени)
2. Исследование
3. Обучение / практика
4. Использование
150
OODA Loop
151* 1970
Рекомендации• Присоединяйтесь к MoscowJS
http://moscowjs.ru/
• Не читайте советских газет - улучшайте английский (Hacker News, Reddit, etc)
• Читайте оригиналы и технические блоги (Netflix, Facebook, AirBnb, LinkedIn и т.д.)
• Активно внедряйте в свою жизнь Twitter и GitHub
Спасибо за внимание
Денис Измайлов
@DenisIzmaylov
https://github.com/DenisIzmaylov
www.startup-makers.ru
denis_izmaylov
top related