SlideShare a Scribd company logo
1 of 39
Download to read offline
@maxmaxmaxmaxМАКСИМ КЛИМИШИН
CTO GVMachines Inc.
React.js:
ускоряем UX / UI
Обомне
‣ 12+ летопытавебразработки,6летJavaScript,
7летPython,годсClojure
‣ Работалв oDesk(Upwork),Helios,
42CoffeeCups.
‣ Со-организаторконференцийPyConUkraine,
KyivJS,KyivPy,Hotcode
‣ с2012годаработаюCTOв GVMachinesInc.
GVMachinesInc.
‣ Стартап по доставкепродуктовпитанияиз
супермаркетов
‣ РаботаемвУкраинекакZAKAZ.UA (Киев,
Днепропетровск,Харьков,скороввашем
городе)ив СШАкакCartFresh(Бостон)
‣ Pythonнабекенде
Нашпуть
Сегодняпоговоримо
Тема
‣ Чтоу насбыло
‣ Почему мыосталисьсReact.js
‣ Каксделать быстрее
‣ Планы
Архитектура
Как это было
АрхитектураПО– этофундаментальные
структурныерешения,которыебудет
несоизмеримодорого изменитьпосле
реализации
Чтоунасбыло
Тема
‣ Python+ Django
‣ Solr+специфичные индексы
‣ Redis
‣ jQuery +jQuery UI +bootstrap2
Как это было
Решили ехатьсjQueryиBootstrap,
неособозаморачиваясьнадкодом
Maintainability
Как это было
Поддерживаемостьсистемы– этокогда
стоимостьпервоначальнойреализации
существеннобольшевсравнениисо
стоимостьюизменений
Как это было
‣ Кодаставалобольше,менятьбылосложнее.
‣ Корзинагенериласьвiframeогромным
кускомDjango-шаблона.Работатьбыло
крайнесложно.
‣ Страницапродукта– сложныймикс
контекстадляшаблона,шаблонаи
несколькихjsфайлов
‣ JSкод вперемешкусDjangoTemplates
‣ Фиксоднойошибкипорождалдвеновые
Решение
Стратегия
Разработка
‣ Опробоватьновыетехнологии:Angular,
Backbone,React.js
‣ Внедрять постепенно,неломаяподорогеине
переписываявесьпроект
‣ Интеграционныетесты
Результат
Разработка
‣ Angularотпалсразукакслишкомсложный
‣ Backbone.jsбыл,нонатотмоментунегобыли
проблемысутечкойпамятииникакого
преимуществапосравнению сjQuery кодомне
было
Разработка
React.jsприжился,посколькоощутимо
выигрывалвпроизводительностиперед
фреймворками,приэтом нетребовалслишком
глубокознанияинструмента
Разработка
Ключевыепреимущества
‣ Еслипрегенерироватькоднасервере– реакт
небудетэтогоделатьна клиенте
‣ Длягенерациидостаточноподатьодинаковое
состояние
‣ Еслисостояние междугенерациейи
отображениемизменится – реактпроизведет
минимальноеколичествоизменений DOM
Результат
Разработка
Короче,мыкупилисьнато,каккомандаReact.js
превратилиO(n3)проблемув O(n)спомощью
двухпростыхдопущений
Процесс
Планируем
Процесс
‣ Переходплавный, дляначала
переписываемсамую ключевую часть–
 корзину
‣ Решили обойтись безcommon.jsи т.п.–
невсечленыкомандыпонимали как
этоработает
Планируем
Процесс
‣ Серверный рендеринг – второй этап
‣ Переводкаталога– третий этап
‣ Переводвзаимодействия с
пользователем– четвертый этап
Всекакобычно
Процесс
‣ Послекорзины2года мышли к
каталогу
‣ Серверный рендеринг реализован
несколько месяцевпосле
полноценной работыкаталога
Разницав перспективе
Процесс
‣ Походузнакомствосновыми
концепциями:CSP,ImmutableDS,
Clojure,CRDT,Haskell
‣ Теория очередей,практическая
работапо моделированию
Процесс
‣ Втораяитерация затянуласьс
аутсорсом
‣ Привычка генерироватьсостояние
server-sideдобавилагеморроя
‣ Изменениявынудили написатьновый
бекенддляAPI
Плохиерешения
Процесс
‣ Строитьновуюсистемумаксимально
используястарыйбекендпривелок
нереальному усложнениюкодабекенда
‣ Использовать подходс$.ajaxвнутри
React.jsкомпонентпривелок
усложнениюи copy-paste-styleкодуна
клиенте
Плохиерешения
Процесс
‣ Продолжитьиспользованиеглобальных
переменных
‣ Продолжитьиспользоватьглобальные
события
Детали
УнифицированныйAPI
Детали
‣ Решениевынестисложностьпо
генерациисостояниявAPIс
возможностью композициииаггрегации
‣ Один APIдля всех– Mobileapp,website
front-end
УнифицированныйAPI
Детали
‣ Решениевынестисложностьпо
генерациисостояниявAPIс
возможностью композициииаггрегации
‣ APIиспользуеткак бекендтакиклиент
‣ Избавилоотнеобходимостиотдавать
сайтчерез node.js сервер
Side-effects
Детали
‣ Параллельные запросыводномAPI
вызове
‣ Простыеипонятныеошибкивалидации
аргументов
‣ Генерация документациинабазе
простойинтроспекцииAPIвызовов
Примерзапроса
Детали
{
"meta": {"session_id": “%SESSION_ID”},
"request": [
{
"type": "timewindows.list",
"args": {
"store_ids": ["00002111"],
"zone_id": "02111"
},
"v": "0.1"
}
]
}
Примердоки
Детали
MODULE: timewindows
-------------------------------------------
RESOURCE: timewindows.list
{'count': <Or(<Int(gt=0)>, <Null>)>,
'index': <class 'trafaret.Int'>,
'only_available': <class 'trafaret.Bool'>,
'store_ids': <List(<String>)>,
'zone_id': <String>}
Архитектура
APISERVERS
request
state
generated
stateresponse
RENDERING
WORKER
REACT.JSDOM
RENDERER
put htmlinto
cache
CACHESERVERS
time
Чтодальше?
Планы
‣ детерминированнаямодельдля
инвалидациисгенерированногодома
дерева
‣ Уменьшениеколичестваасинхронного
кодав JS(CSP)
‣ Неизменяемые структуры(Redux,
Immutable)
‣ Работас корзинойчерезCRDT-базу
Планы
static state (state, channel, n=0) {
// we could use CSP channels here
return go(function * () {
yield put(channel, title(“About"));
var talks = yield take(json({url: “/api/talks.json”}));
yield put(channel, [“talks", talks]);
channel.close()
})
}
Communicatingsequentialprocesses
Планы
CRDT(Swarm.js)
Спасибо.
Thanks!
@maxmaxmaxmax

More Related Content

Viewers also liked

Viewers also liked (7)

JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"
JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"
JS Lab`16. Андрей Колодницкий: "Разработка REST сервисов на SailsJS"
 
JS Lab`16. Виктор Турский: "Современные тенденции в разработке frontend"
JS Lab`16. Виктор Турский: "Современные тенденции в разработке frontend"JS Lab`16. Виктор Турский: "Современные тенденции в разработке frontend"
JS Lab`16. Виктор Турский: "Современные тенденции в разработке frontend"
 
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"
JS Lab`16. Андрей Копенкин: "RethinkDB + Socket.io. Real-time web 2.0"
 
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
JS Lab`16. Сергей Селецкий: "Ретроспектива тестирования JavaScript"
 
JS Lab`16. Виктор Клочихин: "Redux в реальной жизни"
JS Lab`16. Виктор Клочихин: "Redux в реальной жизни"JS Lab`16. Виктор Клочихин: "Redux в реальной жизни"
JS Lab`16. Виктор Клочихин: "Redux в реальной жизни"
 
JS Lab`16. Роман Лютиков: "ClojureScript, что ты такое?"
JS Lab`16. Роман Лютиков: "ClojureScript, что ты такое?"JS Lab`16. Роман Лютиков: "ClojureScript, что ты такое?"
JS Lab`16. Роман Лютиков: "ClojureScript, что ты такое?"
 
AI&BigData Lab 2016. Сергей Шельпук: Методология Data Science проектов
AI&BigData Lab 2016. Сергей Шельпук: Методология Data Science проектовAI&BigData Lab 2016. Сергей Шельпук: Методология Data Science проектов
AI&BigData Lab 2016. Сергей Шельпук: Методология Data Science проектов
 

Similar to JS Lab`16. Максим Климишин: "Smarter React.js: UI faster, UX better"

«Новый 2ГИС Online» — Влад Семенов, 2ГИС
«Новый 2ГИС Online» — Влад Семенов, 2ГИС «Новый 2ГИС Online» — Влад Семенов, 2ГИС
«Новый 2ГИС Online» — Влад Семенов, 2ГИС
DevDay
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine Learning
OdessaJS Conf
 
Tech Success: Web/2.0 startup HOWTO
Tech Success: Web/2.0 startup HOWTOTech Success: Web/2.0 startup HOWTO
Tech Success: Web/2.0 startup HOWTO
lyncis
 

Similar to JS Lab`16. Максим Климишин: "Smarter React.js: UI faster, UX better" (20)

PiterPy 2015 - Трансдюсеры и Python
PiterPy 2015 - Трансдюсеры и PythonPiterPy 2015 - Трансдюсеры и Python
PiterPy 2015 - Трансдюсеры и Python
 
JSLab. Максим Климишин. "Трансдюсеры, CSP каналы, неизменяемые структуры данных"
JSLab. Максим Климишин. "Трансдюсеры, CSP каналы, неизменяемые структуры данных"JSLab. Максим Климишин. "Трансдюсеры, CSP каналы, неизменяемые структуры данных"
JSLab. Максим Климишин. "Трансдюсеры, CSP каналы, неизменяемые структуры данных"
 
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScriptТрансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
 
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
"Изоморфная разработка на javascript с помощью react.js" Максим Климишин
 
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
WebCamp2016:Front-End.Максим Климишин.Теоретические и практические концепции ...
 
Moscow js node.js enterprise development
Moscow js node.js enterprise developmentMoscow js node.js enterprise development
Moscow js node.js enterprise development
 
Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"Евгений Ртищев "Мобильная платформа на ReactNative"
Евгений Ртищев "Мобильная платформа на ReactNative"
 
«Новый 2ГИС Online» — Влад Семенов, 2ГИС
«Новый 2ГИС Online» — Влад Семенов, 2ГИС «Новый 2ГИС Online» — Влад Семенов, 2ГИС
«Новый 2ГИС Online» — Влад Семенов, 2ГИС
 
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
 
От заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit TechОт заката до рассвета | Максим Безуглый | Zlit Tech
От заката до рассвета | Максим Безуглый | Zlit Tech
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine Learning
 
Mihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine LearningMihail Zachepilo - WebAssembly powered Machine Learning
Mihail Zachepilo - WebAssembly powered Machine Learning
 
Geek week 2015. Создание полезных приложений в оговоренный срок.
Geek week 2015. Создание полезных приложений в оговоренный срок.Geek week 2015. Создание полезных приложений в оговоренный срок.
Geek week 2015. Создание полезных приложений в оговоренный срок.
 
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
Сергей Перескоков "JS API Яндекс.Карт 2.0: что нового и как это работает"
 
Как мы переходили на sails.js
Как мы переходили на sails.jsКак мы переходили на sails.js
Как мы переходили на sails.js
 
Meet Magento Belarus - Andriy Samilyak
Meet Magento Belarus - Andriy SamilyakMeet Magento Belarus - Andriy Samilyak
Meet Magento Belarus - Andriy Samilyak
 
Isomorphic React.js (by Maksym Klymyshyn) - Hack'n'Tell JavaScript - 2015.05.16
Isomorphic React.js (by Maksym Klymyshyn) - Hack'n'Tell JavaScript - 2015.05.16Isomorphic React.js (by Maksym Klymyshyn) - Hack'n'Tell JavaScript - 2015.05.16
Isomorphic React.js (by Maksym Klymyshyn) - Hack'n'Tell JavaScript - 2015.05.16
 
Изоформные приложения на React.js
Изоформные приложения на React.jsИзоформные приложения на React.js
Изоформные приложения на React.js
 
Tech Success: Web/2.0 startup HOWTO
Tech Success: Web/2.0 startup HOWTOTech Success: Web/2.0 startup HOWTO
Tech Success: Web/2.0 startup HOWTO
 
Tech Success: Web/2.0 startup HOWTO
Tech Success: Web/2.0 startup HOWTOTech Success: Web/2.0 startup HOWTO
Tech Success: Web/2.0 startup HOWTO
 

More from GeeksLab Odessa

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
GeeksLab Odessa
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
GeeksLab Odessa
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
GeeksLab Odessa
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
GeeksLab Odessa
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
GeeksLab Odessa
 

More from GeeksLab Odessa (20)

DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
DataScience Lab2017_Коррекция геометрических искажений оптических спутниковых...
 
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
DataScience Lab 2017_Kappa Architecture: How to implement a real-time streami...
 
DataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский ВикторDataScience Lab 2017_Блиц-доклад_Турский Виктор
DataScience Lab 2017_Блиц-доклад_Турский Виктор
 
DataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображениеDataScience Lab 2017_Обзор методов детекции лиц на изображение
DataScience Lab 2017_Обзор методов детекции лиц на изображение
 
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
DataScienceLab2017_Сходство пациентов: вычистка дубликатов и предсказание про...
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-докладDataScienceLab2017_Блиц-доклад
DataScienceLab2017_Блиц-доклад
 
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
DataScienceLab2017_Cервинг моделей, построенных на больших данных с помощью A...
 
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
DataScienceLab2017_BioVec: Word2Vec в задачах анализа геномных данных и биоин...
 
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
DataScienceLab2017_Data Sciences и Big Data в Телекоме_Александр Саенко
 
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
DataScienceLab2017_Высокопроизводительные вычислительные возможности для сист...
 
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
DataScience Lab 2017_Мониторинг модных трендов с помощью глубокого обучения и...
 
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
DataScience Lab 2017_Кто здесь? Автоматическая разметка спикеров на телефонны...
 
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
DataScience Lab 2017_From bag of texts to bag of clusters_Терпиль Евгений / П...
 
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
DataScience Lab 2017_Графические вероятностные модели для принятия решений в ...
 
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
DataScienceLab2017_Оптимизация гиперпараметров машинного обучения при помощи ...
 
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
DataScienceLab2017_Как знать всё о покупателях (или почти всё)?_Дарина Перемот
 
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
JS Lab 2017_Mapbox GL: как работают современные интерактивные карты_Владимир ...
 
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
JS Lab2017_Под микроскопом: блеск и нищета микросервисов на node.js
 

JS Lab`16. Максим Климишин: "Smarter React.js: UI faster, UX better"