Upload
mobicode
View
86
Download
2
Embed Size (px)
Citation preview
Сбербанк
1) ВСП
2) Банкоматы
3) Сайт
4) Мобильный банк
5) Колл-центр
6) Мобильные приложения
1) Вклады
2) Карты
3) Активные операции
4) Страхование
5) CIB
6) Пенсионный фонд
2
Какие задачи нужно решить?
1) Web и mobile приложения2) Единый интерфейс3) Унификация стека4) Минимизация затрат5) Быстрый перенос 6) Быстрый time-to-market
3
Содержание
1) ReactNative
2) Наше решение
3) Архитектура
4) Производительность
5) Оптимизации
6) Результаты
4
VirtualDOM
14
React: VirtualDOM -> DOMReactNative: VirtualDOM -> UIView
React: CSS, CSS-Module, React-StylesReactNative: React-Styles
Flexbox
15
сlass FlexExample extends Component { render() { return ( <View style={{flex: 1, flexDirection: 'row'}}> <View style={{ width: 50, height: 50, backgroundColor: 'powderblue' }} /> <View style={{ width: 50, height: 50, backgroundColor: 'skyblue' }} /> <View style={{ width: 50, height: 50, backgroundColor: 'steelblue' }} /> </View> ); }};
CSSLayout
17
CSSLayout -> CSSNodeReactNative -> ShadowView
1) CSS
2) Синтаксис свойств
3) Значения по умолчанию
4) Размеры в px
5) Абсолютные значения
Наше решение
18
1) Web и mobile приложения2) Унификация стека3) Единый интерфейс4) Минимизация затрат5) Быстрый перенос 6) Быстрый time-to-market
Предпосылки
1) Legacy-системы для web
2) Отсутсвие iOs-разработчиков
3) Большое количество JS-разработчиков
Cordova / PhoneGap?
1) Не нативный интерфейс
2) Ограниченность нативного API
3) Сильная зависимость от технологии
Компонентный подход
22
mobile
web
Проект N
.
.
.
ПроектыБиблиотека компонентов
1) Единая точка входа2) Навигация3) Кнопки4) Текстовые поля5) Видео-плеер6) Элементы выбора7) Системный АПИ8) Работа с сетью…
Кросс-платформенная библиотека
23
mobile
web
Проект N
.
.
.
JavaScriptJavaScript
API компонентов
iOs
Web
Objc-C + ReactNative
JavaScript + React
Типы компонентов
Визуальный Не визуальный / Сервис
Компонент
<View><TextInput><Button><Video>
fetch()get()post()log()
24
Создаем визуальный компонент
TextInput.m
TextInput.h
Obj-C
TextInputViewManager.h
TextInputViewManager.m
Obj-C
TextInput.js
JavaScript
+ +
25
TextInput.m
29
1) Xib + init
2) UITextField
3) UILabel
4) setText -> UITextField.text
5) setPlaceholder -> UILabel.text
6) UITextFieldTextDidChangeNotification -> onChange
35
AssemblyViewInteractorPresenter
3-уровневая архитектура
VIP
ConnectionServiceFileServiceCacheService
SOA
ViewManagerUIView+ReactShadowView.js
Bridge
MessageQueue.js
1) Управление View
2) Обработка действий пользователя
3) Сетевое взаимодействие
4) Запись в файл
5) Анимации
39
ListView
41
Не UITableView. Почему?
MessageQueue Obj-cJSupdate update
MessageQueue Obj-cJScell?cell?
MessageQueue Obj-cJSJSX cell
Советы по оптимизации
1) Не нагружать MessageQueue
2) Нативные анимации
3) Native modules / Web workers
4) Lazy require, laze native modules
5) Лишние render()
6) ASCII в JavaScriptCore, не UTF-8
7) Убираем JS _DEV_
8) No batches
43
Подводим итоги
44
1) Web и mobile приложения2) Унификация стека3) Единый интерфейс4) Минимизация затрат5) Быстрый перенос 6) Быстрый time-to-market
Что хорошего в ReactNative?
1) Это работает :)
2) Flexbox
3) Hot+Live Reloading
4) Time travel
5) Code Push
6) Sandbox
46
Что плохого в ReactNative?
1) Beta
2) Производительность
3) Heap size
4) Debugging
5) Архитектура
6) Тестирование
47
Полезные ссылки
1) Официальная страница ReactNative:https://facebook.github.io/react-native/
2) Список проектов, использующий ReactNative: https://facebook.github.io/react-native/showcase.html
3) Поддерживаемые спецификации JS https://facebook.github.io/react-native/docs/javascript-environment.html4) CSSLayout https://github.com/facebook/css-layout5) Создание F8 http://makeitopen.com/tutorials/building-the-f8-app/planning/
5050
Полезные ссылки
51
6) MessageQueue.jshttps://medium.com/@rotemmiz/react-native-internals-a-wider-picture-
part-1-messagequeue-js-thread-7894a7cba868#.a8ujgnqc77) Тесты производительности
https://code.facebook.com/posts/895897210527114/dive-into-react- native-performance/
8) Удалённый симуляторhttps://appetize.io/