Кроссплатформенным фаворитом для разработки MVP был и остается React Native. К счастью, разработка не отношения. Смотреть по сторонам можно и нужно.
Ребята из Google завезли новую технологию, которую я изучил вдоль и поперек. Как самостоятельную SDK, так и в сравнении с React Native. Об этом и расскажу в статье.
Кому советую читать:
- Разработчикам, которые хотят прокачивать скилы в кроссплатформе и примеряют на себя варианты с разработкой на Flutter и React Native.
- Продуктовым менеджерам, которые хотят разработать приложение для iOS и Android и ищут подходящую технологию.
А теперь давайте к делу.
Чем интересна разработка на Flutter
Недельный “заныр” помог мне раскопать несколько особенностей этого фреймворка.
Вот, что я узнал:
- Cравним по простоте с разработкой веба. Все пишется на языке Dart, который похож на смесь JavaScript и Java. Это обеспечивает низкий порог вхождения для разработчиков из веба и нативки.
- Dart — простой для всех, кто знаком с ООП-ориентированными языками. Язык соответствует всем аспектам этой методологии и реализует её через синтаксис. При этом, в отличие от той же Java, в Dart можно иметь функции высшего уровня.
- Dart — многопоточный язык (в отличие от JS). Это значит, что разработчики, более не сдерживаемые интерпретатором JS AFAIK, могут работать с потоками и фьючерами, открывая поле для настоящего реактивного программирования.
- Стопроцентно работающий hot reload в разработке на Flutter. Киллер-фича, которая помогает легко “пересобирать” проект и экспериментировать: добавлять и убирать новый функционал, править ошибки “на лету”.
Hot reload будет моментально обновлять оба устройства, будь то симулятор или реальный девайс
- Подход для работы с состоянием взят из концепции React. Виджеты ( или компоненты для мира веба) перерисовываются по необходимости, когда что-то меняется в состоянии приложения. Можно спокойно подключить тот же redux (например, fish redux от Alibaba) и получить однонаправленный поток — это позволит управлять состоянием приложения, прямо как в React Native.
- Интерфейс разбивается на отдельные модули, как и в React Native. Привычные JS-разработчику компоненты тут зовутся виджетами, и интерфейс легко считывается как иерархия этих виджетов, вложенных друг в друга.
- Имеет систему готовых плагинов и библиотек в рамках pub. Достаточно зайти на сайт мендежера пакетов и перевести ползунок на Flutter.
2600 репозиториев —вполне достойно для молодой технологии
- Работает как с http(s) запросами, так и с вебсокетами. Поддерживает GraphQL и все популярные библиотеки.
- Важнейшие библиотеки уже вышли. Постоянно добавляются новые. Нет ощущения брошенности платформы.
Разработка на Flutter или React Native
Чтобы получить максимально четкую картинку, я столкнул лбами Flutter и то, что уже проверено на поле битв. Мои “проектные битвы” проходят с React Native, поэтому начну с него. А выделить могу вот что:
- Простая технология. React Native — легкий способ войти в мобильную кроссплатформенную разработку для тех, кто привык работать на JavaScript.
- Обширное коммьюнити. За четыре года RN накопил тонны библиотек и готовых решений. Любая проблема в большинстве случаев решается через поиск в Google.
React Native “цветет и пахнет”. Звезды, форки и быстро закрывающиеся issues тому подтверждение
- Возможность обернуть нативный код в JS. Если разработчик умеет писать нативный код, перенос части вычислений на нативный уровень и последующий sharing кода между платформами поможет избежать проблем с производительностью.
А теперь смотрим, что этому может противопоставить разработка на Flutter:
- Фреймворк схож по скорости с нативными решениями. Никакого JS тут нет, Dart компилируется напрямую в бинарный код. Таким образом, скорость выполнения операций такая же, как в Objective-C, Swift, Java или Kotlin.
- Нормальная виртуальная машина. Не нужно беспокоиться о линковании библиотек (одна из главнейших головных болей RN), проблемах несовместимости на нативном уровне, поскольку весь код будет выполняться из-под Dart VM.
- Многопоточность. В отличие от JS, можно полноценно работать с потоками. Прелесть да и только!
- “Под капотом” Skia, а не нативные компоненты. Для отрисовки каждого пикселя Flutter использует Google Skia. Нет необходимости проектировать интерфейс отдельно под iOS и Android, Skia всё отрисует идентично, с поправкой на особенности местного UI (если необходимо)
- Анимации на уровне 120 фпс. В этом плане разработка на Flutter успела обогнать не только RN, но и нативные языки. А все из-за движка Skia, который вкупе с местным фреймворком для анимаций, выдает быстрый результат.
А вот в чем разработка на Flutter заметно проседает:
- Менее развитое комьюнити. “Зеленый” Dart явно уступает устоявшемуся JavaScript. (есть шанс, что когда-то это изменится).
- Меньше библиотек. Из-за в процессе разработки на Flutter многие базовые вещи, например, компоненты и сервисы, приходится писать вручную. В то время, как в React Native это же самое может быть реализовано одной из либ.
- Сложно внедрять в проекты. Для работы с легаси-кодом придётся переписывать всё под Dart, в то время, как React Native можно использовать, вынося часть унаследованного нативного кода внутри нового проекта.
- Больше кода не “под капотом”. Собственный графический движок повышает производительность, но заставляет писать так много, как этого требует SDK.
Что в итоге?
Для кроссплатформы React Native — это верный боевой солдат. Он успел пройти огонь, воду и медные трубы. Показал себя в сражениях. С таким все четко и без сюрпризов. И это прекрасно.
React React Native — это верный солдат, а “хайпует” разработка на Flutter
Разработка на Flutter? Или все-таки React Native? Один предпочтет не проверять судьбу проект на прочность и выберет зарекомендовавшую себя технологию. Другому понравится идея разрабатывать на чем-то “хайповом”. Окончательный выбор за вами — других вариантов и быть не может 🙂
Чтобы вы могли быстрее сориентироваться, предлагаю ответить на несколько вопросов.
- Готова ли кодовая база к росту на этой платформе? Если проект на нативных языках и вам не хочется переписывать код на Dart, React Native вам в помощь.
- Сложно ли это в поддержке? Если вы работали с Dart, нативными языками и жаждете нового, можно легко поддерживать унаследованный код на Flutter. Гуру в JavaScript и тем, кто только начинает программировать уверенно советую прокачиваться в React Native.
- Нужны быстрые анимаций с высокой степенью оптимизации? Несколько решений для внедрения достойных анимаций (например, Lottie от AirBnb) присутствуют и в React Native, но Flutter на несколько шагов впереди.
- Горят ли сроки? (всегда горят) Чем больше библиотек и готовых решений, тем быстрее и проще разрабатывать. Если главный приоритет — “по-быстрому выкатиться на рынок с MVP”, разработка на Flutter будет не самым лучшим решением. React Native — вот ваше спасение.
Каким будет будущее разработки на Flutter и React Native? Рынок рассудит 🙂