Перейти к содержанию
Progress

· 8 мин чтения

React Native или нативная разработка: где кросс-платформа ломается

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

За пять лет мы выпустили 9 приложений: 11 на React Native, 3 нативных. Расскажу, по какому признаку принимаем это решение, потому что обычно его принимают по стоимости, а это неправильный критерий.

Почему по умолчанию React Native

Одна кодовая база вместо двух. На типовом проекте — приложение с авторизацией, списками, формами, картами и push-уведомлениями — экономия выходит около 40 % по сравнению с двумя нативными командами. Плюс обе платформы развиваются синхронно, не бывает ситуации, когда Android-версия отстаёт на два релиза.

Для 8 проектов из 10 этого достаточно, и пользователь не отличит такое приложение от нативного.

Четыре случая, когда мы говорим «нет»

1. Фоновая работа с геолокацией

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

2. Bluetooth и работа с устройствами

Приложение, которое общается с медицинским прибором, замком, кассой или датчиком. Библиотеки для React Native существуют, но на каждой нестандартной прошивке начинаются расхождения в поведении между iOS и Android, и отладка съедает всю экономию.

3. Обработка видео и камера сложнее съёмки

Распознавание документов в реальном времени, фильтры, дополненная реальность. Здесь нужен прямой доступ к кадрам с камеры, и передача их через мост React Native даёт заметные задержки.

4. Анимации как основа продукта

Не «карточка плавно появилась», а продукт, в котором анимация — это суть: редакторы, игры, интерактивные обучающие приложения. Reanimated закрывает многое, но если анимация в каждом элементе и должна держать 120 кадров, нативная разработка даёт запас.

Чего в этом списке нет

Нет пунктов «большой список», «много данных», «сложная бизнес-логика». Это самые частые опасения заказчиков, и они не обоснованы. Список на 50 000 элементов на React Native скроллится нормально, если он написан правильно.

Проблема почти никогда не в React Native, а в том, что разработчик рендерит весь список сразу вместо виртуализации. Это исправляется кодом, а не сменой платформы.

Как мы это проверяем до договора

Если по описанию задачи есть сомнения, мы делаем технический прототип за свой счёт: 3–5 дней, одна рискованная функция, проверка на реальном устройстве. Это дешевле, чем выяснить через четыре месяца, что архитектура не подходит.

На приложении для курьеров мы делали именно так. Главный риск был в офлайн-синхронизации: приложение должно писать данные без сети и корректно сливать их потом. Прототип занял четыре дня и показал, что React Native здесь справится. Проект собрали на Flutter по другой причине — у заказчика был свой разработчик на Dart, которому предстояло поддерживать приложение.

Коротко

  • Кросс-платформа — разумный выбор по умолчанию, а не компромисс
  • Решение определяется типом задачи, а не бюджетом
  • Четыре красных флага: фоновая геолокация, Bluetooth, обработка кадров камеры, анимация как продукт
  • В спорных случаях прототип на неделю дешевле ошибки на четыре месяца

02 — Контакты

Обсудим проект

Расскажите о задаче в двух словах. Ответим в течение рабочего дня и предложим время для разговора.

Телефон
+7 (988) 823-70-86
Время работы
Пн–Пт, 10:00–19:00 (МСК)
Или напишите напрямую: @adadba