Хотя многие команды полагались на React Native и планировали использовать его в обозримом будущем, мы, в конечном счете, не смогли достичь наших первоначальных целей. Существует ряд технических и организационных проблем, которые мы не смогли преодолеть, и дальнейшая разработка с React Native превратилась для нас в проблему.
В результате, мы будем двигаться вперед без React Native, мы заканчиваем использование технологии в Airbnb, реинвестируя все наши усилия обратно в нативную разработку.
Неспособность достичь целей
Двигаться быстрее
Когда React Native работает так, как должен, инженеры могут двигаться вперед с беспрецедентной скоростью. Однако многочисленные технические и организационные вопросы, которые мы изложили в этой серии статей, привели к проблемам и неожиданным задержкам во многих проектах.
Поддерживать качество
Только в последнее время, когда React Native уже достиг зрелости, и мы накопили больше опыта, мы смогли сделать ряд вещей, которых ранее не могли достичь. Мы реализовали общие переходы для элементов, сделали параллакс, смогли значительно повысить производительность некоторых экранов, которые раньше тормозили. Однако некоторые технические проблемы, такие как инициализация и первый асинхронный рендеринг, сделали реализацию некоторых задач очень непростой. Отсутствие ресурсов внутри и снаружи еще более усложнило ситуацию.
Писать код один раз
Несмотря на то, что код React Native практически идентичен для разных платформ, только небольшой процент нашего приложения был написан на React Native. Кроме того, требуется большое количество переходной инфраструктуры, чтобы инженеры-разработчики могли эффективно работать. В результате мы поддерживали код на трех платформах вместо двух. Мы видели потенциал в совместном использовании кода между мобильными платформами и веб-сайтом, имели возможность расшарить несколько npm-пакетов, но помимо этого кроссплатформенность никогда особо не работала.
Улучшение опыта разработчиков
Опыт разработчиков с React Native оказался разноплановым. Например, время сборки значительно улучшилось. Однако отладка значительно ухудшилась. Подробности вы можете найти во второй статье.
Закат солнца будет осуществляться вручную
Поскольку мы не смогли достичь наших целей, мы решили, что React Native больше нам не подходит. В настоящее время мы работаем с командами для создания правильного плана перехода. Мы остановили разработку всех новых функций на React Native и планируем перевести большинство экранов с самым высоким уровнем трафика на нативный код к концу года. Этому способствует запланированный редизайн, который должен был произойти независимо от кодовой базы. Наша собственная инфраструктурная команда будет поддерживать React Native до 2018 года. В 2019 году мы начнем снижать поддержку и сокращать присутствие React Native, убирая его вклад в работу приложений.
В Airbnb мы твердо верим в open source. Мы активно используем и вносим вклад во многие проекты с открытым исходным кодом по всему миру, а также открываем некоторые из наших работ на React Native. По мере того, как мы будем отходить от React Native, мы будем публиковать наши наработки для сообщества. Так, мы уже выложили 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 развивается быстрее, чем когда-либо. За последний год было более 2,500 коммитов, и Facebook только что объявил, что решил некоторые технические проблемы, с которыми мы столкнулись. Даже если мы больше не будем инвестировать в React Native, мы будем рады и дальше следить за разработками — технические победы React Native превращаются в реальные победы для людей во всем мире, которые используют наши продукты.
Выводы
Мы интегрировали React Native в большие существующие приложения, которые продолжали развиваться очень быстрыми темпами. Многие из трудностей, с которыми мы столкнулись, были связаны с использованием гибридного подхода. Тем не менее, наш масштаб позволил нам принять и решить некоторые сложные проблемы, с которыми небольшие компании, возможно, не смогли бы справиться. Заставить React Native бесшовно работать с нативным кодом можно, но это сложно. Каждая компания, использующая React Native, получит свой уникальный опыт, который будет зависеть от команды, уже существующего приложения, требований к продукту и зрелости React Native.
Если сложить все вместе и резюмировать работу платформы со множеством функций, то скорость итераций, качество и опыт разработки соответствовали или превзошли все наши цели и ожидания. Время от времени действительно казалось, что мы вот-вот изменим всю мобильную разработку. Несмотря на то, что эти впечатления были очень обнадеживающими, когда мы сравнили плюсы и минусы, учли потребности и ресурсы нашей инженерной команды, то решили, что React Native для нас больше не подходит.
Решение о том, следует ли использовать новую платформу, является важным, и полностью зависит от факторов, уникальных для вашей команды. Наш опыт и причины отказа могут быть нерелевантными для вашей команды. Фактически, многие компании продолжают сегодня успешно использовать React Native, и он может стать лучшим выбором для многих других.
Статьи
- Часть 1: React Native в Airbnb
- Часть 2: Технология
- Часть 3: Создание кроссплатформенной мобильной команды
- Часть 4: Принятие решения по React Native
- Часть 5: Что будет дальше в мобайле