Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2018. Андрей Оздьон (Lingualeo) — Исто...

CodeFest 2018. Андрей Оздьон (Lingualeo) — История одного портирования: о чем стоит подумать заранее при работе с React Native

Посмотрите выступление Оздьона: https://2018.codefest.ru/lecture/1300/

React Native — нестабильная, но крайне мощная при правильном использовании технология, мириться с проблемами которой имеет смысл только при определенных условиях в команде

При разработке приложения со сложной архитектурой и/или кастомным UI все равно нужен сильный нативный разработчик под каждую платформу и это обязательное условие

Интеграция React Native в существующее приложение — задача на порядок сложнее разработки с нуля по очевидным и не очень причинам, в том числе довольно слабой документированности этой возможности.

Интеграция в существующее приложение связана с добавлением ряда новых ограничений в работе приложения, с которыми дальше придется жить

Функционал библиотеки React Native на одной платформе может довольно сильно отличатся от другой платформы даже в рамках одного компонента, это нужно будет учитывать при разработке дизайна и проработке внутрикомандных паттернов реализации

Разработка часто сводится к поиску компромиссов в целях оптимизации производительности, а не к реализации задач разработки

Время разработки/портирования крайне сложно спрогнозировать ввиду возникновения серьезных заминок или ограничений в неожиданных местах: в целом разработка занимает столько же времени, сколько и нативная, если не больше

CodeFest

April 05, 2018
Tweet

More Decks by CodeFest

Other Decks in Programming

Transcript

  1. ОДИН КОД Проблема так или иначе встает перед каждой командой,

    но сколько у этой проблемы решений? И все ли они жизнеспособны? МНОГО ПЛАТФОРМ
  2. WebView Application React Native Логика в библиотеках + outsource Логика

    в библиотеках Игровой движок СКОРОСТЬ РАЗРАБОТКИ КАЧЕСТВО УДОБСТВО
  3. R E A C T N A T I V

    E В L I N G U A L E O УПОР НА МОБИЛЬНУЮ РАЗРАБОТКУ Ой, тут выступление идёт? Я не вовремя, да? Тихо-тихо, ухожу…
  4. АЛЬФА-ПРОТОТИП Внутренние тестирование технологии ОТВЕТНЫЙ УДАР Перенос реализованного функционала на

    Android РЕЛИЗЫ В ОДНИ ВОРОТА Первый релиз React Native на iOS, последующее усиление функционала
  5. ПОЛНЫЙ ПАРИТЕТ ТРЕНИРОВОК? Большую часть работы, проделанной в рамках одной

    платформы, удается перенести на другую, но не всегда в том виде и в те сроки, которые представляются вначале
  6. ЧТО ПОД КАПОТОМ У REACT NATIVE Реализация кроет в себе

    львиную долю проблем, с которыми придется рано или поздно встретиться
  7. КОМПРОМИСС - Разные гайдлайны под платформы - Изначально разная архитектура

    - Невозможность реализовать определенные вещи в силу ограничений платформы
  8. EARLIER ADOPTERS - React Native сейчас имеет «стабильную» версию 0.5*

    - Каждое следующее изменение может быть несовместимым - Хвост обновления зависимостей проекта не поддается прогнозированию Ну, программируешь ты лучше, чем рисуешь… Чет я на себя не похож ;)
  9. APPLE ПОШУТИЛИ, МЫ ГРУСТНО ПОСМЕЯЛИСЬ IPHONE X Feature Detection и

    так является не самой сильной стороной React Native. А скоро и вовсе станет бесполезен.
  10. ОТЛАДКИ Поведение релизной и отладочной сборок отличается несколько больше, чем

    бы вам того хотелось Не все проблемы видны в отладочной сборке и не все, что кажется проблемой в отладочной сборке, стоит внимания Особняком выделяются проблемы производительности и утечки памяти на стыке технологий ИСКУССТВО Он такие слова во время отладки говорил… Страшные… Жуткие… А потом этим ртом с женой общался, кошмар!
  11. Анимация Экономия View Тузы в рукаве Есть несколько способов решить

    проблемы и остаться в здравом уме. Но без жертв не обойдется О. ОПТИМИЗАЦИЯ СЛОВАРЬ REACT NATIVE
  12. АНИМАЦИЯ React идеологически плохо совместим с анимацией. React Native умеет

    не делать ошибок старшего брата и дает опцию useNativeDriver. Только для свойств opacity и transform. И С П О Л Ь З У Й С И Л У Н А Т И В Н О Й С Т О Р О Н Ы
  13. ЭКОНОМИЯ VIEW Большое количество анимированных объектов не спасает даже вывод

    анимации на сторону нативной реализации, нужно постоянно думать как их сэкономить М Е Н Ь Ш Е — Л У Ч Ш Е
  14. ТУЗЫ В РУКАВЕ Иногда сама реализация жизненного цикла React не

    позволяет улучшить быстродействие. Тогда приходится идти на хитрости Р А Д И К А Л И З М К А К И Н С Т Р У М Е Н Т
  15. Решает проблемы стилевой совместимости, разницы экранов, платформ и прочие экстремальные

    случаи ИНСТРУМЕНТЫ В ЯЩИКЕ Позволяет рационально использовать возможности сборщика React Native COMPATIBILITY LLCONTROLLER
  16. COMPOSITION VIEW CONTROLLER LLCONTROLLER Отвечает за общение с внешним стейтом,

    расчет, преобразование и проксирование входных данных для View Компонент без привязки к стейту, имплементирующий интерфейс контроллера Совокупный компонент для внешнего использования М А Г И Я З Д Е С Ь
  17. ПРИМЕР РЕАЛИЗАЦИИ В СТУДИЮ // controller.js export class Controller extends

    React.Component { render() { const {children: View} = this.props; return (<View {…this.props} {…this.state} />); }; } // view.ios.js export class ViewIOS extends React.Component {…} // view.android.js export class ViewAndroid extends React.Component {…}
  18. ПРИМЕР РЕАЛИЗАЦИИ В СТУДИЮ // utils.js export function composeComponent(Controller, View)

    { class LLComposed extends React.Component { static displayName = ( `LLComposed(${Controller.displayName}|${View.displayName})` ); render() { return React.createElement( Controller, this.props, View ); } } return LLComposed; }
  19. ПРИМЕР РЕАЛИЗАЦИИ В СТУДИЮ // component.js import {composeComponent} from ”./utils”;

    import Controller from ”./controller”; import View from ”./view”; export default composeComponent(Controller, View); // somewhere-else.js import Component from ”./component”; … render() { return <Component prop1=“val1” prop2={2} />; } …
  20. В ЗАКЛЮЧЕНИИ ПОРА ОТВЕТИТЬ НА ЗАДАННЫЙ ВОПРОС О чём стоит

    задуматься перед тем, как выбрать React Native?
  21. О З Д Ь О Н А Н Д Р

    Е Й Senior Frontend Developer [email protected] WWW.LINKEDIN.COM/IN/AAHZZYY Мог бы и представить, я что, зря выперся посреди выступления?