Изоморфная разработка на
JavaScript с помощью React.js
@maxmaxmaxmaxМАКСИМ КЛИМИШИН
CTO ZAKAZ.UA
GVMachines Inc.
Обомне
‣ 11+ летопытавебразработки,5летJavaScript,
6летPython
‣ Работалв oDesk,Helios,42cc.
‣ Со-организаторконференцийPyConUkraine,
KyivJS
‣ 3годаработаютехническимдиректоромв
ZAKAZ.UA
Что такое
изоморфный код?
isomorphic
Возможностьиспользовать
одини тотжекод
какнаклиентетакинасервере
ISOMORPHIC
СЕЙЧАС
CLIENT
API
SERVER
изоморфный код
Valueproposition
Проблемыonepageapps
Зачем это надо?
‣ Производительность-загрузкаданных,
задержкапри старте
‣ Тяжелаяоперацияпорендерингуисозданию
DOM-дерева
‣ Недружелюбныедлякраулеров(hashbang)
Проблемыархитектуры
Зачем это надо?
‣ Двойнаявалидациявходныхданных
‣ Поддержкасложнойбизнес-логики
одновременнонаклиентеинасервере
‣ Зависимость отсерверавмобильных
приложениях
ИзоморфныйJavaScript
может
решитьэти проблемы
Зачем это надо?
React.js
Чтонужно
‣ Рендеритькомпонентына сервере
‣ Обновлятьданныенаклиенте без
перезагрузкистраницы
‣ Максимальноунифицироватькодсервераи
клиента
Архитектурно
comp_data = f(x)
dom_cli = React.render(…comp_data…)
html_srv = React.renderToString(…comp_data…)
x = url ∪ cookies ∪ get_data ∪ post_data
Состояниеприложения(x)
‣ Location
‣ Cookies
‣ GETparams
‣ POSTparams
КакэтосделатьвReact.js
‣ вroot-овомкомпонентеопределить
статическийизоморфныйметод,который
‣ собираетсостояниезапроса:path,cookies
getparams,postparams
‣ консолидируетзаборданных
‣ отложитьрендерroot-овогокомпонентадо
концавыполненияметода
Решения
‣ Relay
‣ GraphQL
‣ Transmit
Relay
Relay.createContainer(Story, {
queries: {
story: graphql`
Story {
author {
name,
profile_picture {
uri
}
},
text}`
}
Недостатки
‣ Relay– нетрелиза
‣ GraphQL– нет релиза,ноестьпарсер
Transmit.createContainer(Main, {
queryParams: {
pagesToFetch: 10
},
queries: {
/**
* Return a Promise */
data: function (queryParams) {
// isomorphic fetch
return fetch(…).then(…)
}
}
Transmit
заменаrelay+graphqlнапромисы
Transmit
Попробоватьможновreact-isomorphic-starterkit
Харашо,вай-вай
React Native
теперьможносоздавать
мобильныеприложения
МОБИЛЬНЫЕ
REACT NATIVE
CLIENT
SERVER
изоморфный код
API
MOBILE
Изоморфный JSкак
отдельныйсервис
Апочему-быне сделать
отдельныйсервис,который
рендеритJavaScriptгденадо
Service
Service
‣ Синхронныйсервис
‣ Очередь задач,асинхронно
Дваварианта
Service
приложение
database cache node.js
rendered rendered
task1
запрос2
state
серверзадачnode.js
запрос1
state
task2
cache
Полезнодлямозга
Выводы
Выводы
‣ Увеличиваетсяколичествоsharedкода,
уменьшаетсярассеивание бизнеслогики
междуразнымиплатформами(клиент,сервер,
мобильные)
‣ УлучшаетсяUX– засчет пререндеринга
пользовательполучаеткартинкунаэкране
быстрее
‣ Улучшаетсявидимостьвпоисковыхсистемах
‣ НенужновсепереписыватьнаJavaScript
Недостатки
‣ Ограничениявсехплатформ,учавствующихв
выполненииприложения (клиент∩сервер∩
мобильный)
‣ Увеличиваетколичествокомпонентовв
системе(если неnode.js-basedпроект)
‣ Сложнеетестировать
Ктовтеме
Выводы
‣ Facebook
‣ Instagram
‣ Yahoo!Mail
‣ Walmart
‣ Airbnb
‣ Netflix
JS Frameworks Day
@maxmaxmaxmax

"Изоморфная разработка на javascript с помощью react.js" Максим Климишин