Кроссплатформенная разработка
Почему React Native может не подойти вашему проекту
Ускорить разработку мобильного приложения можно с помощью кроссплатформенных фреймворков. Этот вариант подразумевает не только экономию времени и бюджета на разработку решения для нескольких платформ одной командой, но и сокращение проблем при адаптации. На рынке современных инструментов явно выделяются Flutter и React Native.
Как следует из данных Statista, после релиза Flutter 2.0 в начале 2021 года интерес разработчиков к нему вырос. Этот фреймворк поддерживает три платформы для приложений в продакшен (Android, iOS и web) и ещё три в бета-версии (Windows, macOS и Linux). Но React Native (далее — RN) практически не уступает Flutter. Мы в SimbirSoft используем и тот, и другой. Поэтому, основываясь на своей практике, решили поделиться опытом и рассказать о тонкостях работы с RN.
Рассмотрим особенности React Native, которые могут оказать влияние на разработку мобильных приложений разных типов. Но для начала выделим общие факторы выбора фреймворка.
Как выбрать фреймворк для мобильного проекта
Выбор фреймворка зависит не только от типа создаваемого приложения, но и от особенностей работы на проекте и имеющихся ресурсов.
Первый фактор, от которого стоит отталкиваться – имеющиеся в команде проекта или в компании ресурсы. Если у вас есть знакомые с React frontend-разработчики, они смогут освоить React Native в сжатые сроки. Если команда состоит только Android-разработчиков, они без особых проблем смогут перейти на Flutter, несмотря на отсутствие в нем «синтаксического сахара». Можно без проблем начать писать на Dart в тот же день, его синтаксис будет близок любому разработчику, знакомому с Java/Kotlin/C#.
Еще один фактор – способ взаимодействия инструмента с платформой. React Native задействует нативные компоненты пользовательского интерфейса, которые общаются с JS через bridge. А у Flutter присутствует свой движок рендеринга Skia, и благодаря компиляции кода через С++, он работает с системой напрямую.
Другой важный фактор, который определяет выбор фреймворка, – специфика проекта. Если нужен MVP для проверки идеи, отлично подойдет React Native. Причем как из-за его простоты, так и из-за скорости разработки.
Почему React Native может не подойти для разработки мобильных приложений
Рассмотрим особенности React Native и их влияние на разработку определенных типов мобильных приложений.
№1. Интернет-магазин/каталог
Пока в вашем приложении менее 30 экранов, его можно вполне комфортно разрабатывать на React Native. Но с ростом кодовой базы и размера необходимых для хранения в приложении данных при использовании RN можно испытывать определенный дискомфорт при любых доработках, связанных с бизнес-логикой.
Из-за появления множества компонентов при использовании RN нужно пристальнее следить за их состоянием. Растет вероятность лишних рендеров, а это может повлиять на производительность и уменьшить 60 FPS до 30-45. Кроме того, у React Native все еще нет версии 1.0, т.е. он не вышел из беты. Любое мажорное обновление, при условии что вы хотите держать его версию в актуальном состоянии, несет в себе многочасовые затраты на актуализацию зависимостей и текущего кода. Поэтому нет гарантий, что не случится удаление важного для многих компонента Picker или PickerIOS, как это было в одном из последних обновлений.
№ 2. Приложения для прослушивания и/или записи аудио
Как на React Native, так и на Flutter можно в короткий срок организовать онлайн и офлайн прослушивание аудиозаписей даже в фоновом режиме, а также разработать приложение для создания и редактирования аудиозаписей, благодаря многочисленным плагинам от комьюнити.
Минус в том, что хоть предлагаемые сообществом и экспертами решения достигли определенного уровня развития, они не идеальны и могут внезапно повести себя неожиданно.
№ 3. Приложения для навигации/прокладки маршрутов
Не у всех провайдеров карт есть официальные SDK для React Native, впрочем, как и для Flutter. В этом случае придется либо интегрироваться с нативными SDK и писать свой плагин для их отображения, либо довольствоваться WebView и mapGL и применять web SDK, жертвуя при этом плавностью и удобством работы с платформой для пользователей.
Резюме
Коротко резюмируя вышесказанное, выделим следующие недостатки, с которыми можно столкнуться при использовании React Native:
- Ограниченное количество кадров: максимально 60fps, а у Flutter – 120fps.
- Сложность в стандартизации разработки из-за большого количества различных решений.
- Затруднения в поиске скилловых специалистов.
- Вопросы безопасности. Есть риск деобфускации JS-бандла и использования в корыстных целях хранящихся в коде данных. Согласно SNYK, в последний раз уязвимости в нем нашлись только в версии 0.64.0 от 12 марта 2021 г. О других уязвимостях данных нет.
Но несмотря на это, React Native для многих остается наиболее простым для освоения фреймворком с невероятно гибкой архитектурой и разнообразными сторонними решениями. Он прекрасно подойдет для любого вида приложений, где вычисления выполняются на стороне сервера, или станет отличным решением для помощи в автоматизации внутренних процессов компании. В зависимости от своего опыта и навыков, ИТ-команда может с помощью React Native также реализовать и более сложные мультимедийные функции.
Если хотите познакомиться с новыми технологиями или прокачать практические навыки, в феврале 2022 года у нас будет два бесплатных Mobile и Frontend-практикумы. Подробности здесь.