Заказчик хочет мобильное приложение под iOS и Android, но не готов оплачивать две отдельные команды и два кодовых базиса. Кроссплатформенный стек закрывает этот запрос: один код, две сборки, единый релизный цикл. В 2021 году выбор фактически сводится к двум зрелым фреймворкам – Flutter от Google и React Native от Facebook. Оба пригодны для энтерпрайза, но ведут себя по-разному, и ошибка на этапе выбора стоит месяцев переделки.
Flutter против React Native: где проходит граница
React Native рендерит нативные виджеты через JavaScript-мост. Это даёт привычный для платформы внешний вид и широкую экосистему npm, но мост становится узким местом при интенсивной анимации и обработке списков на десятки тысяч строк. Команды, уже владеющие React и TypeScript, входят в проект почти без переобучения – весомый аргумент, когда фронтенд-разработчиков на рынке больше, чем мобильных.
Flutter рисует интерфейс собственным движком Skia, минуя нативные компоненты. Отсюда стабильные 60 кадров в секунду и пиксельно идентичная картинка на обеих платформах. Язык Dart незнаком большинству, но осваивается за пару недель, а строгая типизация и горячая перезагрузка ускоряют разработку сложных экранов. Минус – приложение тяжелее на старте и иногда выглядит «не родным» для конкретной ОС.
Практический водораздел простой. Контентные и формоцентричные приложения – личные кабинеты, заявки, дашборды, ЭДО-клиенты – одинаково хорошо ложатся на оба стека. Графически насыщенный продукт с кастомным UI и плавными переходами надёжнее делать на Flutter. Проект, где критична интеграция с существующим React-вебом и общими бизнес-правилами, тяготеет к React Native.
Что меняет энтерпрайз и госсектор
Корпоративный и государственный контур добавляет требования, которых нет у потребительских приложений. Нужны интеграция с корпоративным SSO, работа с криптографией и квалифицированной подписью, поддержка защищённых каналов и аудит действий. Подпись документа с телефона – типовой кейс: здесь кроссплатформенный слой неизбежно опускается до нативных модулей, и опыт работы с юридически значимым ЭДО и электронной подписью определяет, насколько гладко это интегрируется.
Безопасность цепочки поставок перестала быть абстракцией. Оба фреймворка тянут сотни сторонних пакетов, и атака через зависимости реальна – недавний инцидент с Kaseya и компрометацией supply chain показал, во что обходится слепое доверие к чужому коду. Для госпроектов мы фиксируем версии зависимостей, проверяем лицензии и держим внутреннее зеркало пакетов, чтобы сборка не зависела от внешнего реестра.
Отдельный фактор – экономика разработки. Завершающийся налоговый манёвр в ИТ снизил страховые взносы и налог на прибыль для аккредитованных компаний, и совокупная стоимость владения кроссплатформенным продуктом стала ещё привлекательнее по сравнению с двумя нативными командами.
Как мы выбираем стек под проект
Мы не начинаем с фреймворка – начинаем с требований. Если на проекте уже есть React-компетенция и общая логика с вебом, берём React Native. Если на первом плане сложный интерфейс, единообразие на платформах и предсказуемая производительность, выбираем Flutter. Тяжёлую криптографию, фоновые задачи и работу с железом выносим в нативные модули в любом случае – кроссплатформа экономит на UI и бизнес-логике, а не на системном уровне.
Выбор стека и распределение логики между кроссплатформенным слоем и нативными модулями мы решаем в рамках мобильной разработки под iOS и Android на старте каждого проекта.
Вывод
Flutter и React Native – не конкуренты «лучше/хуже», а инструменты под разные задачи. React Native выигрывает там, где есть React-команда и веб-интеграция. Flutter – там, где важны интерфейс и производительность. В энтерпрайзе и госсекторе выбор стека вторичен по отношению к безопасности зависимостей, интеграции с подписью и SSO. Решайте от требований, а не от моды.