Разработка веб-приложений для мобильных делится на две категории: нативная и кроссплатформенная. Первая дает больше свободы в реализации дополнительного функционала, другая позволяет не заморачиваться с адаптацией под разные мобильные платформы. Выбор варианта разработки будет зависеть от ваших знаний языков программирования, необходимого функционала готового приложения и требований в техническом задании от клиента.
Рассмотрим, чем отличаются нативная и кроссплатформенная разработка, когда и в каких случаях лучше использовать тот или иной вариант.
Нативная разработка
Она дает больше свободы в плане реализации дополнительных возможностей приложения, но требует отдельной разработки для каждой операционной системы с использованием разных языков программирования и логики работы алгоритмов. Для Android пишутся приложения на языках Java и Kotlin, а для iOS на Objective-C или Swift. “Нативки” хорошо интегрированы с операционной системой, для которой созданы, например, они могут взаимодействовать с другими встроенными приложениями – “Календарем”, “Часами” и подобными. Конечно же, уровень совместимости с операционной системой у них будет выше.
Самый серьезный недостаток нативного подхода – невозможность быстрой адаптации приложения под другую операционную систему. Предположим, вы создали “нативку” для Android. Она работает замечательно, но вот работает она только на Android. Если требуется охватить еще пользователей iPhone и iPad, то придется писать это же приложения с нуля уже для iOS, с использованием других языков программирования. Одному разработчику очень сложно сделать одинаково хорошо работающее нативное приложение как для Android, так и для iOS, поэтому на рынке есть много вакансий Android или iOS разработчиков.
Итог: “нативки” отлично адаптированы для какой-то конкретной операционной системы, плюс, в них можно реализовать практически любой функционал. Однако за это приходится дорого платить во всех смыслах – если вы захотите, чтобы приложение работало и на iOS и на Android, то придется с нуля разрабатывать две разные версии с использованием разных языков программирования и подходов. Для бизнеса это дополнительные расходы, так как вместо разработчика-”универсала” нужно нанимать сразу двух, хорошо разбирающихся в разработке, для той или иной операционной системы. Поэтому к созданию нативных приложений прибегают в том случае, если требуется реализовать какое-то нестандартное решение или сделать крупный проект с хорошей оптимизацией.
Наглядная разница между нативной и кроссплатформенной разработкой
Кроссплатформенная разработка
Она идеально подходит для создания небольших приложений. Например, есть несложный сайт, владелец которого решил, что помимо адаптации дизайна и функционала под мобильный экран, неплохо было бы сделать еще и отдельное приложение. Часто они создаются с использованием стандартной связки HTML+CSS+JavaScript. Она универсальна и отлично отображается на любых операционных системах, плюс, для использования не требуется каких-то углубленных знаний.
Кроссплатформенная разработка позволяет не думать про создание приложений под разные операционные системы – одна и та же версия будет корректно работать на любой ОС. Правда, организовать более сложное взаимодействие с инструментами операционной системы будет очень сложно или вообще невозможно. Также при кроссплатформенной разработки приложений реализовать и поддерживать какие-то нестандартные решения очень сложно, поэтому она далеко не всегда подходит для создания и запуска каких-то продвинутых продуктов.
Помимо стандартной связки HTML+CSS+JS в разработке часто используются специальные фреймворки: React Nativ, Flutter, реже Vue и Angular. Для работы с ними тоже нужно знать HTML, CSS и JavaScript (последний желательно на высоком уровне). Дополнительно может требоваться знание других языков программирования, например, Dart для Flutter или Python для Angular. Однако часто можно обойтись только базовыми знаниями.
Итог: кроссплатформенная разработка легче в освоении, плюс, не требует создавать несколько разных версий приложений с нуля на разных языках программирования для разных операционных систем. Однако это накладывает некоторые ограничения на реализацию дополнительных возможностей в рамках разрабатываемых приложений, например, не получится сделать плотную интеграцию в операционную систему. Да и с совместимостью иногда бывают небольшие проблемы.
Сравнение нативной и кроссплатформенной разработки
Чтобы лучше определиться с выбранным подходом сравним процесс разработки и качество работы приложений при использовании нативной и кроссплатформенной разработки по нескольким показателям.
Рекомендуемые инструменты для разного типа приложений и разработки
Работа на разных платформах
Здесь преимущество можно было бы отдать кроссплатформенной разработке, но не все так однозначно. Да, вам не нужно писать заново код и вникать в особенности каждой новой платформы, для которой в техническом задании требуется адаптировать приложение. Однако идеальную совместимость тоже гарантировать нельзя – под некоторые версии той или иной ОС требуется вносить свои доработки или вовсе использовать другой подход к разработки. Иногда при кроссплатформенной разработке тратиться больше времени на оптимизацию, чтобы все работало как задумано, чем при создании двух разных версий нативных приложений.
Что касается нативных приложений, то главная сложно здесь – необходимость разрабатывать 2 разные версии под разных операционные системы с использованием полностью разных языков программирования и, иногда, даже разной логики. Плюс, приложения в плане функционала и внешнего вида должны быть максимально похожи на разных ОС. Правда, оптимизация у готового приложения для своей операционной системы получится великолепная – все функции, которые должны работать, будут корректно работать вне зависимости от версии ОС, пользовательских настроек и прошивок производителя.
Итог: кроссплатформенные все же в этом показатели выигрывают. Да, их оптимизация может быть не идеальна, но подправить мелкие неполадки часто выходит быстрее и дешевле, чем писать две полностью разные версии одного и того же веб-приложения.
Интеграция в операционную систему
Этот пункт отвечает за возможность “связать” готовое приложение со встроенными по умолчанию приложениями и инструментами выбранной операционной системы. У кроссплатформенной разработки в этом плане все плохо – максимум, что получится сделать – отправку пуш-уведомления. За возможность тратить минимум времени на адаптацию под разные платформы приходится платить тем, что использовать их по полной никак не получится. В теории, можно добиться более плотно интеграции, но для этого придется интегрировать дополнительные библиотеки и плагины, что усложняет их разработку и обслуживание.
Нативные приложения имеют отличную совместимость со всеми возможностями операционной системы и системных инструментов, под которые они написаны. Это значит, что вы без проблем сможете сделать не только отправку уведомлений на смартфон, но и, например, получить доступ к контактам, календарю, камере, галереи и так далее. При этом вам не потребуется делать каких-либо дополнительных надстроек, следовательно, приложение будет легче разработать и обслуживать в дальнейшим.
Итог: в этом пункте однозначное преимущество у нативной разработки. Она дает доступ ко всем компонентам операционной системы, под которую создается приложение. Кроссплатформенная разработка таким похвастаться не может – для получения доступа требуется использовать дополнительные плагины и библиотеки, а иногда его вообще никак не получить.
Нативные приложения умею делать запрос на доступ к системным приложениям, а кроссплатформенные нет
Проектирование интерфейсов
Нативная разработка, особенно, с применением дополнительных инструментов, позволяет реализовать абсолютно любой дизайн интерфейса, который при этом будет полностью интерактивен и функционален. Да, на его реализацию потребуется больше времени, но зато в нем можно применить самые смелые решения и не беспокоиться о том, что где-то, например, будет работать некорректно анимация.
Кроссплатформенная разработка, если идет речь про использование фреймворков, больше напоминает конструктор, в котором есть полностью изменяемые шаблоны всех основных элементов интерфейса, а также возможность создать свой собственный. Создание интерфейсов таким образом упрощает и ускоряет разработку, но при этом ограничивает разработчика – сделать какое-нибудь интересное и необычное решение будет сложнее, плюс, не факт, что оно будет работать корректно.
Итог: если нужно быстро и без лишних заморочек, то кроссплатформенная разработка выигрывает. Обычно такие требования применяются к очень стандартизированным веб приложениям, например, интернет-магазинов. Если же требуется сделать что-то нестандартное или просто быть уверенным в том, что интерфейс будет максимально корректно работать, то лучше выбрать нативную разработку. Да, вы потратите на нее больше времени, но зато сможете реализовать все, что требуется и быть уверены в работоспособности этого.
Демонстрация возможностей проектирования интерфейса в React Native из шаблонных блоков
Пользовательский опыт
Любое приложение должно быть отзывчивым и при этом максимально понятным пользователям. За любым действием должна следовать какая-нибудь реакция интерфейса – появление анимации, переход на другой раздел и так далее. И все это должно происходить максимально плавно, естественно и, главное, без тормозов.
Кроссплатформенные приложения не всегда справляются с этими задачами – анимация иногда выглядит “топорно”, реакция приходит с небольшим запозданием. Еще стоит учитывать то, по каким стандартам изначально проектировалось приложение. Если изначально все делалось по гайдлайнам под Android, то пользователи iOS могут испытывать некоторый дискомфорт в процессе взаимодействия с приложением.
В случае с нативными приложениями стандарты вы задаете сами, поэтому, если ответственно отнесетесь к проработке логики взаимодействия с интерфейсом, то в плане пользовательского опыта выиграете. Готовый продукт получится с плавной анимацией, логичными переходами и, главное, с отсутствием тормозов.
Итог: в плане лучшего пользовательского опыта рекомендуется отдавать предпочтение нативным приложениям. У кроссплатформенных часто встречаются мелкие проблемы, вроде резкой анимации, подвисаний, некорректных срабатываний.
Ограничения
В плане разработки нативного приложения у вас гораздо больше свободы – вы можете реализовывать любой функционал, практически не сталкиваясь с ограничениями как со стороны ОС, так и со стороны инструментов разработки. По-сути, единственное, чем вы ограничены – возможности операционной системы, под которое разрабатывается приложение.
С кроссплатформенными все сложнее:
- Вы не сможете использовать полноценно все возможности операционной системы устройства. Это отчасти можно исправить плагинами, сторонними библиотеками, но никто не гарантирует, что все будет корректно работать.
- На вас накладываются ограничения со стороны фреймворков и других инструментов разработки. Некоторые решения возможны реализовать только с помощью “костылей”, а другие вообще невозможно.
Итог: меньше всего ограничений у нативной разработки.
Безопасность
Если по техническому заданию у приложения должен быть высокий уровень безопасности и стандартные решения не подходят, то остается выбрать только нативную разработку. Здесь вы или команда разработчиков сможете реализовать дополнительные протоколы, в том числе и самописные.
У кроссплатформенных с безопасностью все не очень хорошо. Мало того, что вы можете пользоваться только стандартными протоколами безопасности, так и еще, из-за особенностей рабочих инструментов, в приложении может быть много разных уязвимостей.
Итог: если к безопасности приложения предъявляются повышенные требования, то выбирайте только нативную разработку.
Поддержка
Приложение мало разработать – его нужно еще и поддерживать. И здесь весомое преимущество именно у кросс-платформенных продуктов. Дело в том, что для нативных нужно два отдельных специалистов либо человек, который одинаково хорошо умеет работать как с Android, так и с iOS. Следовательно, на поддержку тратиться вдвое больше времени и ресурсов.
Кроссплатформенное приложение вполне может поддерживать один человек с не самой высокой квалификацией. Так как нужно работать только с одной версией, то и времени на внесение изменений уходит меньше, плюс, не нужно учитывать множество особенностей той или иной операционной системы. Единственная проблема в том, что кроссплатформенные приложения приходится чаще править, чтобы оно продолжало работать корректно.
Итог: на поддержку кроссплатформенных приложений тратится значительно меньше времени и ресурсов, чем на поддержку нативок.
Кроссплатформенная разработка: дешево и быстро или нет
Она действительно обходится дешевле, да и времени требует меньше. Плюс, порог входа для разработчиков ниже, а это значит, что ее можно освоить быстрее. Правда, здесь есть свои подводные камни.
Разница в скорости разработки и количестве ресурсов между кросс и натив не такая большая. Во всяком, случае не в 2 раза. Дело в том, что кроссплатформ все равно требуется “дооптимизировать”, плюс, таким приложениям чаще требуется поддержка. Разницу в 2 и более раз можно получить только в случае работы над каким-нибудь небольшим проектом. Чем сложнее разрабатываемое приложением, тем меньше будет разница в потраченных ресурсах и времени.
Заключение
Начинающему разработчику лучше выбрать кроссплатформенную разработку для быстрого входа в профессию. Все необходимые навыки достаточно просто освоить, особенно, если уже был опыт работы верстальщиком. Если вы решите работать с нативом, то придется углубляться в какую-то одну сферу – Android или iOS. Ваши приложения в таком случае будут значительно лучше по большинству показателей, но времени на их разработку будет потрачено больше. Еще учтите, что порог входа в натив выше, поэтому вам придется больше учиться. Правда, бюджеты у проектов, где требуется нативная разработка тоже больше, плюс, есть возможность командной работы.