Skip to content

Latest commit

 

History

History

gabriel-peal-sunsetting-react-native

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

React Native в Airbnb: Закат React Native

Из-за различных технических и организационных вопросов, мы будем постепенно избавляться от React Native и направим все наши усилия на улучшение нативного кода.

Перевод статьи Gabriel Peal: Sunsetting React Native.

Это четвёртая статья в серии, в которой мы поделимся нашим опытом с React Native и расскажем, что ждёт в дальнейшем мобильную разработку в Airbnb. Где мы находимся сегодня?

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

В результате, двигаясь вперед, мы отказываемся от React Native в Airbnb и реинвестируем все наши усилия обратно в нативную разработку.

Неспособность достичь наших целей

Двигаться быстрее

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

Поддерживать планку качества

Недавно, когда React Native повзрослел, и мы накопили больше опыта, мы смогли реализовать ряд вещей, про которые мы изначально не были уверены, что это возможно. Мы создали общие переходы элементов (shared element transitions), параллакс, и смогли значительно улучшить производительность некоторых экранов, которые часто теряли кадры. Тем не менее, некоторые технические проблемы, такие как инициализация и асинхронный первый рендер, усложнили достижение определенных целей. Нехватка внутренних и внешних ресурсов еще более осложнила эту задачу.

Единый код для двух платформ

Несмотря на то, что код в новых разделах нашего приложения, написанных с помощью React Native, был почти полностью переиспользован между платформами, только небольшой процент нашего приложения использовал React Native. Кроме того, для эффективной работы требовались большие объемы недостающей инфраструктуры. В результате мы получили поддержку кода на трех платформах вместо двух. Мы увидели потенциал для совместного использования кода между мобильными приложениями и браузерным кодом, смогли поделиться несколькими пакетами в npm, но помимо этого кроссплатформенность никогда особо не работала.

Улучшить опыт разработчиков

Опыт разработчиков с React Native был смешанным. В некоторых отношениях, таких как время сборки, все было значительно лучше. Однако в других, таких как отладка, все было намного хуже. Подробности перечислены в части 2 этой серии.

План отказа от React Native

Поскольку мы не смогли достичь наших конкретных целей, мы решили, что React Native больше не подходит для нас. В настоящее время мы работаем с командами над созданием здорового плана перехода. Мы остановили разработку нового функционала на React Native и планируем к концу года перевести большинство экранов с самым высоким трафиком на нативный код. Этому способствовали некоторые запланированные изменения, которые должны были произойти независимо. Наша собственная инфраструктурная команда будет поддерживать React Native до конца 2018 года. В 2019 году мы начнем снижать поддержку и уменьшать некоторые издержки React Native, влияющие на работу нашего приложения, такие как инициализация среды выполнения при запуске.

В Airbnb мы твердо верим в открытый исходный код. Мы активно используем и вносим свой вклад во многие проекты с открытым исходным кодом по всему миру, а также имеем открытые исходники некоторых из наших проектов на React Native. Поскольку мы отошли от React Native, мы не сможем поддерживать наши React Native репозитории на том уровне, который заслуживает сообщество. Чтобы делать то, что лучше для сообщества, мы переместим некоторые наши библиотеки в react-native-community, этот процесс уже начат с react-native-maps и будет продолжен с native-navigation и lottie-react-native.

Не все так плохо

Хотя мы не смогли достичь наших целей с React Native, инженеры, которые использовали React Native, как правило, имели положительный опыт. Из этих инженеров:

  • 60% описывают свой опыт как удивительный.
  • 20% в общем положительно относятся к платформе.
  • 15% относятся к платформе отрицательно.
  • 5% сильно недовольны.

63% инженеров выбрали бы React Native снова, если бы им предоставили такой шанс, а 74% готовы рассмотреть React Native для нового проекта. Стоит отметить, что в этих результатах присуща предвзятость отбора, поскольку он охватывает только людей, которые уже решили использовать React Native ранее.

Эти инженеры написали 80 000 строк продуктового кода на 220 экранах, а также 40 000 строк JavaScript-инфраструктуры. Для справки, у нас примерно в 10 раз больше кода и в 4 раза больше экранов на каждой нативной платформе.

React Native взрослеет

Эта серия записей отражает наш опыт работы с React Native на сегодняшний день. Тем не менее, Facebook и сообщество React Native посвящают много времени созданию React Native для гибридных приложений. React Native прогрессирует быстрее, чем когда-либо. В прошлом году было более 2 500 коммитов, и Facebook только что объявил, что они решают некоторые из технических проблем, с которыми мы столкнулись. Даже если мы больше не будем инвестировать в React Native, мы будем рады и дальше следить за разработками – технические победы React Native превращаются в реальные победы для людей во всем мире, которые используют наши продукты.

Выводы

Мы интегрировали React Native в большое существующее приложение, которое продолжали развивать очень быстрыми темпами. Многие из трудностей, с которыми мы столкнулись, были связаны с подходом гибридной модели, который мы приняли. Однако наш масштаб позволил нам взять на себя и решить некоторые сложные проблемы, которые небольшие компании, возможно, не успели бы решить. Заставить React Native бесшовно работать с нативным кодом можно, но это сложно. Каждая компания, использующая React Native, получит свой уникальный опыт, который будет зависеть от команды, уже существующего приложения, требований к продукту и зрелости React Native.

Если сложить вместе то, что он сделал для для нашего нового функционала — скорость итераций, качество и опыт разработки соответствовали или превзошли все наши цели и ожидания. Временами казалось, что мы находимся на грани изменения правил игры для мобильной разработки. Несмотря на то, что этот опыт был очень обнадеживающим, когда мы сбалансировали положительные моменты с болевыми точками и добавили текущие потребности и ресурсы нашей инженерной организации, мы решили, что эта технология больше не подходит для нас.

Решение о том, использовать ли новую платформу, является важнейшим решением и полностью зависит от факторов, уникальных для вашей команды. Наш опыт и причины отказа от React Native могут не относиться к вашей команде. В действительности, много компаний продолжаются успешно использовать его сегодня и может он все еще является лучшим выбором для много других.

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


Это четвёртая часть в серии статей, освещающих наш опыт работы с React Native в Airbnb.

Часть 1: React Native в Airbnb

Часть 2: Технология

Часть 3: Создание кроссплатформенной мобильной команды

Часть 4: Принятие решения по React Native

Часть 5: Что дальше с мобильной разработкой


Слушайте наш подкаст в iTunes и SoundCloud, читайте нас на Medium, контрибьютьте на GitHub, общайтесь в группе Telegram, следите в Twitter и канале Telegram, рекомендуйте в VK и Facebook.