React Native: плюсы и минусы фреймворка с точки зрения бизнеса
React Native: плюсы и минусы фреймворка с точки зрения бизнеса
На рынке представлены разные кроссплатформенные решения для разработки приложений сразу для Android и iOS. У каждого из них свои особенности, поэтому команды разработчиков отдают предпочтения разным фреймворкам. Чтобы понять, подходит ли предложенный подрядчиками инструмент вашему бизнесу, важно знать его преимущества и недостатки. В статье рассмотрим плюсы и минусы одной из популярных платформ — React Native.
Что это такое
Что такое React Native
React Native — фреймворк для языка программирования JavaScript. Он позволяет писать приложения для Android и iOS, используя одну и ту же кодовую базу.
На рынке React Native появился в 2015 году. Компания Facebook выпустила его в качестве проекта с открытым исходным кодом. Всего за пару лет фреймворку удалось стать одним из самых популярных решений для мобильной разработки. Сегодня React Native используют для поддержки некоторых ведущих приложений, в том числе Instagram, Facebook и Skype.
Особенности
Особенности React Native
Разберёмся, почему React Native так полюбился разработчикам и бизнесу.
Уникальные характеристики и преимущества React Native
- Нативные модули
Структура React Native приложения состоит из двух основных компонентов. Это JavaScript-код, который описывает бизнес-логику приложения и используется повторно для разных платформ. А также нативные компоненты, написанные на языках, специфичных для Android и iOS. Они обеспечивают доступ к функциям мобильных устройств, таким как камера, календарь и карты.
- Flux-архитектура
Она состоит из четырёх слоев: действия (actions) сообщают об активности пользователя в приложении, диспетчер (dispatcher) обрабатывает полученные команды, хранилища (stores) хранят информацию, а представления (views) отображают её и определяют внешний вид интерфейса. Такая архитектура помогает сделать однонаправленный поток данных предсказуемым и упрощает отслеживание ошибок.
Flux-архитектура
- Поддержка TypeScript
Этот язык программирования можно использовать вместо JavaScript. Он обеспечивает статическую типизацию данных: она уменьшает количество багов в приложении и обеспечивает его стабильную работу.
- Fast Refresh
Функция быстрого обновления позволяет редактировать фрагменты кода и моментально видеть результат на девайсе или симуляторе. Пересобирать приложение, чтобы просмотреть изменения, нет необходимости, что экономит время разработчиков.
- CodePush
Облачная служба для редактирования программного кода на удалённом сервере с автоматической отправкой обновлений на девайсы пользователей. Благодаря ей разработчики могут быстро устранять баги, добавлять новые функции и повышать производительность приложения без загрузки новой версии продукта в сторы.
- Большое сообщество
React Native поддерживает многочисленное коммьюнити разработчиков. Они разрабатывают новые библиотеки и плагины, делятся примерами кода с коллегами и подсказывают друг другу, как реализовывать разные фичи.
На GitHab у React Native 116 000 звёзд и около 24 000 веток обсуждений
Кроссплатформенность React Native
React Native позволяет создавать приложения одновременно для нескольких устройств, используя единую кодовую базу. По словам представителей Meta*, если разработка ведётся для Android и iOS, около 90% кода можно переиспользовать без оптимизации — это ускоряет процесс выпуска сервиса на рынок и экономит средства. Компания получает две версии продукта для разных систем практически за одно и то же время и с тем же бюджетом. При нативной разработке вторую версию пришлось бы создавать с нуля.
Как это работает
Как работает React Native
Рассмотрим механику работы фреймворка.
Архитектура и основные компоненты React Native
Структура React Native приложения формируется из таких компонентов, как View, Text, Button, Alert, Image и ScrollView. Они позволяют добавлять блоки, надписи, кнопки, всплывающие окна, отображать фотографии и осуществлять прокрутку страниц. Существуют и другие элементы, которые разработчики могут использовать в зависимости от задач сервиса. Например, FlatList предназначен для создания списков, а ActivityIndicator отображает круговой индикатор загрузки.
Компоненты помогают разделить интерфейс на отдельные части и настроить каждую из них индивидуально. Для этого к ним добавляют атрибуты, определяющие цвет, размер, расположение элемента на странице и прочие параметры. При необходимости к объектам присоединяют обработчики событий. Они активируются в различные моменты взаимодействия пользователя с сервисом.
Когда пользователь открывает приложение, система подгружает JavaScript-код, который описывает внешний вид интерфейса, и нативные модули — они предоставляют доступ к специфическим функциям устройств. Раньше взаимодействие между ними и отрисовку компонентов на экране обеспечивал специальный мост. Он работал асинхронно и выполнят задачи не постоянно, а только тогда, когда к нему обращался процесс.
Мост — связующее звено между активными компонентами системы и кодом на JavaScript
Архитектура оказалась недостаточно эффективной. В крупных приложениях мосту приходилось обрабатывать огромное количество процессов, что приводило к замедлению работы сервисов. Поэтому от данной концепции отказались.
В 2022 году на смену ей пришла технология JSI (JavaScript Statically Integrated). Она компилирует код в бинарный формат, обеспечивает прямое взаимодействие с нативными модулями и позволяет избегать дополнительных расходов на сериализацию — перевод данных в битовую последовательность. Благодаря изменениям в архитектуре разработчики смогли внедрить во фреймворк новый рендер Fabric: он повысил скорость отрисовки элементов интерфейса. Теперь приложения на React Native запускаются и работают быстрее.
Разработка приложений
Разработка мобильных приложений на React Native
Создание кроссплатформенных приложений на React Native включает в себя те же этапы, что и нативная разработка. Рассмотрим каждый из них более подробно.
Методика разработки на React Native
- Брифинг и исследование
На этом этапе определяют бизнес-цель, целевую аудиторию приложения, его примерную структуру, набор функций продукта, а также платформы, на которых планируется релиз.
Чтобы погрузиться в задачу, команда исследует бизнес заказчика, продукты других компаний и особенности целевой аудитории. Это помогает сформировать представление о потребностях пользователей, почерпнуть интересные фишки и понять, как отстроиться от конкурентов.
- Дизайн
Команда продумывает, из каких разделов должно состоять приложение, как пользователи смогут взаимодействовать с ними и какие элементы будут отображаться на экранах. В соответствии с гайдлайнами операционных систем создаётся макет, который отражает расположение объектов, их внешний вид и взаимодействие между собой. Поскольку у iOS и Android есть отличия в навигации (UX) и дизайне (UI), разработчики продумывают, как добиться единообразия интерфейсов. Готовые библиотеки компонентов — UI-киты — упрощают процесс проектирования.
- Разработка
Чтобы приложение работало на мобильных устройствах, разработчики переводят макет в единый для обеих платформ JS-код. С его помощью они описывают логику работы сервиса и внешний вид интерфейса. Чтобы он работал корректно и на iOS, и на Android, при необходимости фрагменты кода адаптируют под особенности каждой операционной системы.
Когда интерфейс готов, команда прорабатывает бэкенд — невидимую часть приложения, которая отвечает за обработку данных и загрузку страниц. Подключаются API, которые обеспечивают коммуникацию между приложением и сервером.
- Оптимизация производительности
Чтобы приложение работало быстро и плавно, код оптимизируют с помощью специальных инструментов. Например, компонент React.memo используют, чтобы снизить количество повторных рендеров и ускорить загрузку. А React.lazy добавляют, чтобы отложить загрузку некритичных объектов до тех пор, пока они не понадобятся пользователю.
- Тестирование и отладка
Перед публикацией приложения в сторах проводят тесты для проверки функционирования сервиса на различных устройствах. Для этого используют реальные девайсы или симуляторы разных операционных систем. Специалисты оценивают соответствие итогового продукта макету, корректность работы отдельных функций и взаимодействие различных компонентов между собой. При обнаружении багов применяют инструменты отладки, например, React Native Debugger.
- Релиз
Продукт готов к загрузке в магазины приложений. Но сначала нужно пройти проверку сторов на соответствие гайдлайнам и требованиям безопасности. Если всё в порядке, сервис становится доступен для скачивания пользователями. Если публикация отклоняется, разработчики вносят в него изменения в соответствии с рекомендациями.
- Поддержка
После публикации команда собирает обратную связь, вносит улучшения в приложение и устраняет баги.
Примеры приложений, созданных с использованием React Native
Делимся историей создания популярных приложений на React Native и рассказываем, почему их разработчики выбрали данный фреймворк.
Instagram*
React Native придумала компания Meta*, чтобы повысить производительность и отзывчивость собственных приложений. В Instagram* фреймворк использовали для интеграции новых функций. Например, с его помощью реализовали push-уведомления. Продуктовые команды поделились, что инструмент помог им повысить скорость разработки на 85-99%.
С помощью React Native в Instagram* реализованы push-уведомления. Источник: Medium
Skype
В работе старой версии приложения был ряд проблем, в том числе — долгая загрузка. Поэтому разработчики полностью переработали дизайн и функционал и пересобрали сервис на React Native. Команда использовала фреймворк и для мобильной, и для десктопной версий продукта.
Интерфейс обновленного Skype. Источник: Pagepаro
Uber Eats
Приложение связывает рестораны, курьер-партнёров и пользователей с помощью специальной панели. Её оригинальная версия ограничивала функционал платформы. Она не позволяла передавать информацию о заказах ресторанам и не поддерживала встроенные опции мобильных устройств, например, звуковые уведомления. Чтобы усовершенствовать панель, разработчики переписали все компоненты на React Native. А инженер-программист Крис Льюис поделился, что апгрейд помог расширить клиентскую базу и сделал UberEats одним из топовых сервисов по доставке еды в США.
Панель Restaurants в Uber Eats. Источник: Uber
Shine
Когда разработчики придумали платформу, которая помогает бороться со стрессом, они сделали ставку на iOS, так как планировали продвигать продукт на американском рынке. Однако со временем они хотели масштабировать сервис и сделать его доступным для пользователей Android. Чтобы не писать приложение для второй платформы с нуля, команда выбрала для разработки React Native.
Разработчики платформы следили за React Native с момента появления фреймворка и думали, как задействовать его в работе. Чтобы протестировать возможности инструмента, они разработали прототип одной из главных функций приложения — средства выбора тем. Инженеры рассказали, что на реализацию задумки в iOS ушло 10 дней, ещё 2 дня потребовалось на её адаптацию под Android. Они подсчитали, что сэкономили больше недели стандартного времени внедрения новой функции.
SoundCloud Pulse
Создатели сервиса для музыкантов планировали написать два нативных приложения для популярных мобильных операционных систем. Однако они столкнулись с трудностями во время поисков инженеров iOS. Тогда команда решила протестировать React Native. Через неделю прототипы экранов платформы были готовы.
Особенности для Android и iOS
Особенности разработки на React Native для Android и iOS
У каждой платформы есть особенности и ограничения, которые влияют на процесс разработки, внешний вид и работу приложений на разных устройствах. Разберём основные нюансы.
Дизайн интерфейса
React Native использует нативные элементы платформ: иконки, кнопки, ползунки, слайдеры и шрифты, характерные для каждой операционной системы. Они выглядят по-разному. Android-компоненты имеют края, стыки и тени, которые придают им реалистичный вид. Оформление iOS-элементов более минималистичное. Чтобы добиться единообразия интерфейса на разных устройствах, придется приложить дополнительные усилия. Например, разработать и применить к элементам кастомные стили, которые будут смотреться одинаково на обеих платформах.
Отличие в реализации функции «выбор» на разных операционных системах. Источник: GitHub
Тестирование
С запуском тестов приложений для Android нет проблем — их можно проверить в Android Studio. А вот с тестированием сервисов для iOS есть трудности: существующие симуляторы этой платформы не признаны Apple официально и считаются ненадёжными. Воспользоваться ими можно, но не факт, что результаты проверки окажутся точными.
Почему мы не работаем
Почему мы не работаем с React Native
Мы в MobileUp не работаем на React Native. Перечислим причины, которые повлияли на наш выбор.
Устаревшие библиотеки
У React Native большой выбор готовых наборов компонентов, но многие из них не обновляются и не адаптируются под новые версии устройств и операционных систем. Нужные объекты могут оказаться несовместимы с платформой, из-за чего сервис будет работать некорректно на некоторых устройствах
Проблемы с развертыванием
Многие библиотеки React Native считаются Apple небезопасными или несоответствующими гайдлайнам компании. Поэтому есть риск, что продукт не пройдёт проверку
Ограничения в дизайне
React Native не поддерживает 3D-графику и сложную анимацию, так как использует для рендеринга движок JavaScript
Низкая степень безопасности
В React Native приложение собирается прямо в процессе работы программы — это называется JIT-компиляцией. Она считается менее надёжной, чем AOT-компиляция, которая предполагает сборку кода до запуска сервиса
Мы отдаём предпочтение другим кроссплатформенным фреймворкам:
- Flutter
Фреймворк работает на языке Dart, разработанном специально для создания мобильных интерфейсов. Он позволяет настраивать интерфейс любой сложности, а собственный движок рендеринга обеспечивает высокую производительность приложений, быструю загрузку и плавную анимацию.
- Kotlin Multiplatform Mobile (KMM)
Даёт возможность применять общую базу кода для бизнес-логики приложений и писать платформенный код только там, где это необходимо. Например, для настройки интерфейса, чтобы реализовать нативный UI под каждую операционную систему. Такой подход к разработке снижает вероятность возникновения ошибок и сокращает время на их устранение.
Заключение
Заключение
React Native предоставляет возможность создавать эффективные и быстрые приложения, охватывать широкую аудиторию пользователей. Однако необходимо учитывать и его ограничения, чтобы принять обоснованное решения при выборе технологии для реализации проекта.
Сотрудничество
Контакты
0Эл. почта
hello@mobileup.ruМы всегда рады сотрудничеству и новым проектам.
Опишите задачу, и мы с вами свяжемся.
Или напишите в Телеграм.
Давайте знакомиться!
Ваша заявка успешно отправлена
Мы все изучим и скоро выйдем на связь