Привет, Хабр! Мы в компании Friflex запустили подкаст «Гости из IT». Вместе с ведущим Антоном Комоловым и экспертами из разных областей IT мы разбираемся в технологиях, и как они меняют нашу жизнь и работу.
Сегодня делимся размышлениями Юрия Петрова, автора YouTube-канала «Мобильный разработчик» и Flutter Team Lead в Friflex, и Ильи Вирника, руководителя сектора разработки продукта «Такси» в Яндекс Про.
О том, чем Flutter хорош для крупного и малого бизнеса, почему это перспективное направление для построения карьеры в IT и в чем особенность языка Dart, на котором пишутся Flutter-приложения.
Что такое Flutter и чем он выделяется среди других фреймворков
Илья Вирник: Flutter — это фреймворк, разработанный компанией Google, который позволяет писать приложения под разные платформы. Его глобальная идея — это кроссплатформенность. Команда Google использует замечательное продажное слово — «мультиплатформенность». Она позволяет бизнесу экономить громадное количество ресурсов, не содержать несколько команд, которые параллельно делают одно и то же.
В свою очередь разработчики получили сакральное знание, которое дает им возможность работать и в iOS, и в Android, и в Web, а когда нужно — еще и на десктоп переключиться.
Юрий Петров: Да, ранее уже были попытки разработать мультиплатформенный фреймворк. Но они все упирались в несколько проблем.
Первая — это производительность. Так сложилось, что производительность именно кроссплатформенных решений всегда считались на порядок ниже, чему нативного приложения. Вторая — отрисовка нативного интерфейса, а третья — запросы в аппаратную часть смартфона. Эти три основные проблемы должен был решить любой кроссплатформенный фреймворк.
Таких фреймворков несколько: React Native, PhoneGap, Xamarin, Ionic...Но именно Flutter решает все эти проблемы. Например, производительность. Так как Flutter полностью сам рендерит весь интерфейс с помощью своего графического движка, она у него достаточно хорошая. Или если взять какие-то нативные элементы, то во Flutter вы ничем не ограничены. Вы можете нарисовать абсолютно любой элемент, который видит пользователь на экране. Например, такой, который будет очень сильно похож на нативный переключатель в IOS.
Ну и обращение именно к аппаратной части смартфона во Flutter придумано достаточно хорошо, через специальные MethodChannel. Вы можете обращаться к нативной части, получать какие-то данные о смартфоне, например, температуру батареи и так далее. Здесь тоже нет никаких ограничений, вы можете получить из платформы абсолютно любую информацию.
А есть ли у Flutter недостатки?
Илья Вирник: Недостатки есть у всего. Flutter ни в коем случае не серебряная пуля, он не избавлен от проблем. На мой взгляд, именно производительность для Flutter все еще остается основной бедой.
Вот мы разрабатываем очень большое приложение, суперапп, которое использует огромное количество платформенных возможностей. Основные его сценарии завязаны вокруг карт, что само по себе уже крайне тяжеловесно. И это не просто какая-то статическая карта, на которой рисуются несколько объектов. Из-за этого проблем не возникнет. Это целый набор API этой карты, вплоть до внутренней навигации, встроенной в приложение. И все это с огромным количеством перекликающихся обращений к бэкенду и к платформенным каналам. Это накладывает серьезный отпечаток на то, как приложение работает.
В нашем случае есть большой внутренний стрим по работе с перформансом. Мы проделали очень большую работу, чтобы этот перформанс вышел на тот же уровень, на котором он был в аналогичном нативном приложении. Оно у нас было до Flutter.
Это подтверждает, что с Flutter возможно писать приложения, которые будут аналогичны нативным. Но в некоторых местах это может быть сложнее.
При этом очень важная оговорка: таких Flutter-приложений, в которых проблемы с производительностью заметны, можно по пальцам пересчитать. Как я уже сказал, мы работаем над громадным приложением с огромным количеством нюансов, которых нет у подавляющего большинства приложений на рынке.
В 99% случаев, скорее всего, вы проблем с производительностью не заметите. Однако не отметить я это не могу, потому что это моя личная боль.
Второе — это все-таки работа с нативом. Flutter позволяет замечательным образом работать с нативными API. Есть платформенные каналы, можно вынуть из платформы любую информацию. Обратиться к камере, микрофону при помощи инструментов, которые Flutter предоставляет из коробки.
Но для этого необходимо написать код несколько раз: продублировать его на всех платформах — как минимум, на IOS, Android. В итоге эта самая экономия в два раза превращается в лучшем случае в один и семь. А, может быть, и того меньше. Например, если у вас есть работа с какой-то очень большой библиотекой, такой как Яндекс Карты.
Юрий Петров: Я добавлю про еще один недостаток — это размер приложения. Flutter тащит за собой свою библиотеку и конечный бандл всегда будет больше, чем нативный. Если вы компилируете под Kotlin или под Swift, аналог под Flutter всегда будет чуть-чуть, но больше.
Илья Вирник: Там разница будет всего на 5 мегабайт. Но это имеет значение, потому что важно не сколько памяти у вас на девайсе, а сколько весит приложение в момент, когда пользователь будет его скачивать. Есть ограничения у сторов: некоторые из них не позволяют скачивать через сотовую связь бандлы выше определенного размера.
Никита Спирьянов: У меня тоже было очень много боли в работе с камерой и платформенными зависимостями.
Часто такой вопрос возникает у заказчиков: сколько нужно разработчиков? Если писать приложение на Flutter, нам достаточно одного разработчика, который знает Dart и Flutter. Мы здесь экономим.
А когда нам надо написать приложение, в котором есть платформенные зависимости, надо подтянуть Swift и переписать что-то, либо Kotlin — и переписать его. Нам нужен один, два или три разработчика соответственно. Когда мы собираем команду, надо понимать, что если нужна экспертиза в других языках, то нужны будут дополнительные разработчики. Бывают достаточно сложные задачи, с которыми один Flutter-разработчик не справится. Или у вас команда Flutter-разработчиков, у которых нет экспертизы в нативе. Поэтому большое преимущество Flutter-разработчика, который имеет опыт в нативе.
Насколько перспективно для мобильного разработчика изучать Flutter
Юрий Петров: Кажется, что во Flutter очень низкий порог входа. Потому что это очень просто: скачиваешь фреймворк, создаешь новый проект, запускаешь, и вот у тебя уже есть волшебная кнопочка. И ты такой: «Я все знаю, я все умею».
Но когда начинаешь сталкиваться с какими-то реальными проблемами, реальными кейсами, или когда приложение становится очень большим, то здесь необходимо знание алгоритмов, структуры и так далее. Если есть большое желание, через 3-4 месяца человек уже может писать свои первые проекты.
На самом деле, база, конечно же, нужна. Минимум что должно быть —это понимание, как работает компьютер, память и так далее, хотя бы на базовом уровне. У меня на канале очень много людей, которые приходили, вообще не зная про программирование. Просто во время пандемии они сидели дома, смотрели мои видеоролики. А потом мне писали, скидывали свои проекты. И все у них получалось, было бы желание.
Никита Спирьянов: Еще один плюс для начинающих — очень крутая документация. Там очень понятно написано, что такое Flutter, как начать, что нужно делать, и дальше будут разбираться кейсы.
Слушайте выпуск целиком на разных платформах:
Apple Подкасты
Яндекс Музыка
Google Подкасты
Castbox
PocketCasts
Overcast
Castro