Главная / Статьи

PWA, Swift и Kotlin или Expo: выбор архитектуры мобильного приложения

Сравните PWA, полностью нативные приложения на Swift и Kotlin, а также Expo с точки зрения структуры кода, наличия в магазинах, производительности, доступа к аппаратному обеспечению, скорости выпуска и стоимости, после чего сделайте выбор.

Издатель: REACTAPP.TOP5 мин чтения1251 слов

Источники: PWA vs Native vs Expo: Pros, Cons, and How to Choose the Right Architecture

Архитектуру, которую вы выбираете для мобильного приложения, трудно изменить позже. Если выбор сделан неверно, следующий год уходит на борьбу с платформой вместо разработки новых функций: конфликты зависимостей после обновления фреймворка, отсутствие API для аппаратного обеспечения или разногласия между командами, работающими над нативным кодом. В этом руководстве сравниваются три наиболее распространенных варианта старта — прогрессивные веб-приложения, полностью нативные приложения, написанные на Swift и Kotlin, а также Expo, основанное на React Native, — и приводятся конкретные критерии для выбора между ними, независимо от того, создаете ли вы MVP или планируете следующий этап развития существующего приложения.

Как сравниваются три варианта

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

База кода

  • PWA: одна веб-база кода, созданная с использованием HTML, CSS и JavaScript.
  • Нативный вариант: отдельная база кода для каждой платформы — обычно Swift для iOS и Kotlin для Android.
  • Expo: единая база кода на JavaScript или TypeScript, совместимая как с iOS, так и с Android.
  • Присутствие в магазинах приложений

    • PWA: располагается в Интернете. Регистрация в магазине является необязательной и требует использования оберток или решений, специфичных для конкретной платформы.
    • Нативный вариант и Expo: распространяются непосредственно через Apple App Store и Google Play.

    Производительность

    • Нативный вариант: максимальная производительность. Плавные анимации с полной частотой обновления дисплея, до 120 кадров в секунду на современных экранах, без вмешательства слоя абстракции.
    • Expo: для большинства интерфейсов близок к нативному решению. React Native отображает настоящие нативные элементы интерфейса, а его новая архитектура заменяет старый асинхронный мост прямыми вызовами из JavaScript в нативный код через JSI, что устраняло давно существовавшее ограничение.
    • PWA: ограничен возможностями движка браузера, особенно в части сложных анимаций и фоновых операций.

    Доступ к аппаратному обеспечению

    • Нативный вариант: доступ ко всему, что предоставляет платформа.
    • Expo: широкий спектр возможностей благодаря SDK Expo, дополняемый плагинами настройки и пользовательскими нативными модулями по мере необходимости.
    • PWA: доступен базовый набор функций веба, таких как камера и геолокация, при этом на iOS существуют значительные недостатки.

    Скорость выпуска

    • PWA: изменения вступают в силу сразу после развертывания, без необходимости проверки в магазине приложений.
    • Expo: обновления через кабель без подключения (OTA) позволяют мгновенно развертывать изменения JavaScript и ресурсов, в то время как изменения в нативном коде по-прежнему проходят через обычную проверку в магазине приложений.
    • Нативное приложение: каждая версия проходит процедуру проверки в магазине приложений.

    Стоимость

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

    Прогрессивные веб-приложения: подход, ориентированный на веб

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

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

    Ограничения. Apple по-прежнему ограничивает работу PWA на iOS. Функция веб-пуш доступна только для приложений, добавленных на главный экран, а выполнение в фоновом режиме строго ограничено. В Safari совсем не поддерживаются веб-Bluetooth и похожие API оборудования. Если продукт зависит от Bluetooth, непрерывного отслеживания в фоновом режиме или глубокой интеграции с устройством, PWA быстро столкнется с проблемами. Политика платформы здесь менялась более одного раза, поэтому уточните текущее состояние для выбранных версий iOS.

    Нативный Swift и Kotlin: максимальный контроль

    Разработка в нативном формате означает необходимость создания и поддержки двух приложений: одного на Swift для iOS и другого на Kotlin для Android.

    Преимущества. Ничего не скрывается, поэтому производительность и качество изображения достигают максимума, возможного на данной платформе. Новые API от Apple и Google становятся доступны сразу после выпуска, без необходимости ожидания создания специальных фреймворков для их использования. Это идеальный выбор для сложных графических задач, интеграции технологий AR или VR, а также для интенсивной обработки данных на фоне.

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

    Expo: одна кодовая база, результаты на уровне нативных приложений

    Expo — это фреймворк и набор инструментов с открытым исходным кодом, созданный на основе React Native. Он скрывает большую часть сложностей сборки приложений для iOS и Android, поэтому один и тот же код на JavaScript или TypeScript может генерировать настоящие нативные приложения для обеих платформ.

    Преимущества. Разработка происходит быстро. Expo Application Services (EAS) собирает нативные бинарники в облаке, поэтому в повседневной работе редко требуется открывать Xcode или Android Studio. EAS Update позволяет выпускать исправления через OTA прямо в установленные приложения. Следует помнить, что обновления через OTA могут изменять JavaScript-код и ресурсы, но не нативный код, а политики магазинов по-прежнему определяют, что может быть изменено в обновлении; новая нативная зависимость требует повторной сборки приложения в магазине.

    Ограничения. Плагины конфигурации и API Expo Modules сделали использование пользовательского нативного кода гораздо более доступным, чем раньше, а версии приложений для разработки позволяют включать любую нативную библиотеку, а не только те, что поставляются с Expo Go. Тем не менее приложениям, которым требуются драйверы оборудования очень низкого уровня или сложный пользовательский код на C++, всё равно необходима реальная нативная разработка, и команде нужен специалист, умеющий это делать.

    Чтобы ознакомиться с более широким спектром кроссплатформенных решений помимо Expo, включая Flutter и Kotlin Multiplatform, прочитайте обзор кроссплатформенных мобильных фреймворков на блоге по адресу .

    Выбор подходящей архитектуры

    Подбирайте архитектуру в соответствии с требованиями продукта, а не с предпочтениями команды в отношении инструментов:

    1. Выберите PWA, когда бюджет ограничен, важна видимость через поисковики, а продукт в основном состоит из контента или форм: онлайн-магазин, новостной сайт или панель управления SaaS. Это также разумный способ проверить спрос перед тем, как инвестировать средства в приложения для магазинов.
    2. Выберите Expo для стартапа, MVP или производственного приложения, которое должно быстро попасть как в App Store, так и в Google Play с использованием одной команды. Этот вариант подходит для большинства бизнес- и потребительских приложений.
    3. Выберите нативное приложение для высококлассных игр, продуктов с интенсивным использованием оборудования, таких как устройства для фитнеса, которые постоянно синхронизируются через Bluetooth, или любого приложения, где критически важны интерфейсы с частотой обновления 120 кадров в секунду и отсутствие рисков абстракции.

    Эти варианты не являются окончательными решениями. PWA может сосуществовать с приложением из магазина, а приложение Expo может содержать нативные модули, написанные на Swift и Kotlin, поэтому часто существует гибридный подход, когда одна из частей продукта превосходит возможности стандартных решений.

    Заключение

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