Нативная разработка vs кросс-платформенная — нужно ли выбирать? — 08.06.2020

Сегодня хотелось бы остановиться на вопросе выбора между нативной и кросс-платформенной разработкой для мобильных приложений. Как показала практика, это актуальная дилемма как для заказчиков, так и для начинающих разработчиков, которые хотят приобрести наиболее полезный опыт для дальнейшей карьеры.

Нативная разработка vs кросс-платформенная
Нативная разработка vs кросс-платформенная — нужно ли выбирать? — 08.06.2020

Если перед вами возникает задача разработать какое-то мобильное приложение, выбор платформы зависит от двух факторов: «Какие языки программирования вы знаете?» и «Какие задачи стоят перед вами?»

Когда речь идет об одиночном разработчике, он не сможет сделать приложение для iOS и Android ни на чем кроме React Native, если он знаком только с Java Script. Но зато, используя кросс-платформенный фреймворк RN, человек может сделать рабочее приложение для двух (а то и больше) операционных систем.

image

Программирование в нативной среде требует знания соответствующих языков. Для Android это Kotlin и/или Java, а для iOS — Swift и/или Objective-C. В принципе можно обойтись и одним из двух для каждой платформы, тем более, что Google активно развивает Kotlin, а Apple вкладывает большие усилия в совершенствование Swift.

Интересная ситуация с Flutter — еще одним популярным кросс-платформенным фреймворком. Для работы с ним нужно знать типизированный язык программирования Dart. Он уже достаточно популярен в рядах программистов, особенно — энтузиастов, так что желающих программировать на Flutter становится все больше (в их числе — создатели мобильных версий eBay, Aliexpress и даже Meduza.io.

image

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

Задачи, требующие нативной разработки

Второй аспект — это стоящие перед командой разработчиков задачи. Преимущество кросс-платформенной разработки заключается в скорости (одно приложение на две платформы) и стоимости проекта. Но иногда заказчику важны другие требования:

Производительность. Если от приложения нужно добиться максимальной производительности, то вам подойдет только нативная разработка. Даже при том, что Flutter прекрасно справляется с анимацией, максимальную отдачу от вычислительной подсистемы устройства можно получить только в нативной среде, не используя промежуточные библиотеки.

Размер приложения. Если нужно сделать приложение максимально компактным, например, если вы разрабатываете для специализированных устройств, или в случае реально большого объема самого приложения, нативная разработка поможет уменьшить его в разы.

Поддержка низкоуровневых функций. Порой, разработчику нужно обратиться к компонентам смартфона напрямую. Это может касаться гироскопа, компаса, модуля распознавания отпечатка пальца или любого другого железа. Как правило, для этого требуется нативное программирование. Также это касается функций шифрования, необходимых для банковского сектора.

Самые современные функции. Наконец, все новшества платформ отражаются в нативных языках в день релиза. На фреймворках они появляются чуть позже — если это очень важные обновления, и намного позже, если это что-то второстепенное. Взять например, виртуальную реальность VR — ее поддержка в RN и Flutter реализована только на базовом уровне, а всех эффектов вы сможете добиться только в нативных средах.

Нюансы комплексных проектов

Впрочем, если приложение представляет собой что-то более сложное, чем отображение веб-контента на мобильном устройстве, нужно иметь в виду, что кросс-платформенные фреймворки тоже связаны с нативом.

Нередко приходится править код каких-то компонентов или писать свои модули на нативных языках. То есть на практике получается, что нативные языки в большинстве случаев не требуются при кросс-платформенной разработке, но знать их все-таки нужно!

Mix — смешать, но не взбалтывать

Иногда меня спрашивают: “Зачем же разрабатывать на RN или Flutter, если в команду все равно приходится набирать нативных разработчиков?”. Но это только поверхностное мнение, так как при ведении проектов у того же RN есть свои плюсы. Например, на React Native намного удобнее описывать интерфейс, в для многих проектов этого и вовсе оказывается достаточно.

image

Таким образом, часто логика и низкоуровневые моменты кодятся на нативе, а интерфейс создается на Flutter или RN. Например, нам недавно нужно было подключить Яндекс.Метрику в проект на React Native. Но в RN не было актуальной метрики — поддерживалась только старая версия, которая не работала. Потребовалось сделать доработку на Java для Android и на Objective-C для iOS, чтобы реализовать полноценную поддержку Яндекс.Метрики.

Когда мы разрабатывали приложение для интернет-радио, в Android-версии использовался плеер, который не поддерживает метаданные в потоке и не показывает исполнителя и название композиции. Пришлось открывать исходный код, дописывать обработку метаданных и собирать полноценный модуль на Java, чтобы подключить его к приложению на RN.

Внешний облик и разные платформы

Еще один аспект — это внешний облик приложения. На просторах интернета часто говорят о том, что внешний вид и поведение некоторых элементов может отличаться на разных платформах при кросс-платформенной разработке. Однако случается это не часто, и если даже проблема возникает, ее несложно поправить, если в штате есть разработчики, знакомые с нативными языками.

К тому же кроме минусов у разработки интерфейса на кросс-платформенных фреймворках есть и большие плюсы — есть дополнительные бонусы. Например, благодаря активной поддержке Microsoft, уже сегодня существует React Native Desktop, который позволяет написать приложение под Windows, опять же, опираясь на один только JS. Кстати, до определенной версии десктопный Skype был реализован именно на React Native.

image

В Flutter активно развивается веб-направление, которое позволяет сделать приложение для браузера. Мы уже проверили на практике, что такой подход будет работать — как на настольной системе, так и на мобильной. Но, естественно, обращение к низкоуровневым компонентам поддерживаться не будет — это касается гироскопа, компаса и другого железа.

image

Например, по такому принципу построены приложения британского сервиса Moneypex. Для разработки всех своих приложений, включая веб, они используют Flutter.

Заключение

Подводя небольшой итог, большинство разработки ведется кросс-платформенно, однако и нативных разработчиков становится больше,
Дело в том, что сегодня уже создано достаточно много библиотек, и кросс-платформенная разработка занимает меньше времени, чем кодинг приложения дважды на двух разных языках. Например, именно так было сделано приложение для отеля Luciano.

image

К тому же, большинство приложений — это клиентские модули, которые отображают какую-то часть веба, предлагают достаточно простые функции. в этом случае просто нет смысла использовать нативную разработку.

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

Благодарю за внимание!!!
Надеюсь статья  «Нативная разработка vs кросс-платформенная — нужно ли выбирать?» была полезной для Вас
Специально для сайта ITWORLD.UZ. Новость взята с сайта Хабр