App Architecture & Platforms

Преимущества Electron vs нативное мобильное приложение vs WebView

Electron (десктоп)

Плюсы:

  • Один кодовой базой покрывает Windows, macOS, Linux
  • Используешь знакомые веб-технологии (HTML/CSS/JS)
  • Полный доступ к файловой системе и системным API через Node.js
  • Быстрая разработка для десктопа

Минусы:

  • Большой размер дистрибутива (Chromium внутри, ~150 МБ)
  • Высокое потребление RAM
  • Нет нативного UI

Нативное мобильное приложение vs WebView

Нативное (Swift/Kotlin)WebView (Cordova, Capacitor)
ПроизводительностьМаксимальнаяОграничена рендером веб-движка
UIНативные компоненты ОСHTML/CSS, не выглядит нативно
Доступ к APIПолный (камера, Bluetooth, NFC)Через плагины, ограниченно
РазработкаНужен Swift или KotlinМожно веб-стек
Анимации60+ fps без усилийМогут быть лаги

Что такое PWA?

PWA (Progressive Web App) — это веб-приложение, которое ведёт себя как нативное: устанавливается на устройство прямо из браузера, работает офлайн, отправляет push-уведомления и не имеет адресной строки при запуске.

Три кита PWA:

  • Service Worker — JS-файл, работающий в фоне отдельно от страницы. Перехватывает сетевые запросы, управляет кешем, позволяет работать офлайн
  • Web App Manifest — JSON-файл с метаданными приложения (иконка, название, цвет темы, режим отображения standalone)
  • HTTPS — обязательное требование, без него Service Worker не работает
{
  "name": "My App",
  "start_url": "/",
  "display": "standalone",
  "icons": [{ "src": "/icon.png", "sizes": "192x192" }]
}

Что умеет PWA:

  • Работать офлайн (через кеш в Service Worker)
  • Устанавливаться на главный экран без App Store / Google Play
  • Получать push-уведомления
  • Обновляться автоматически при каждом запуске
  • Получать доступ к камере, микрофону, геолокации, Bluetooth, NFC

Ограничения:

  • На iOS push-уведомления работают только для PWA, добавленных на домашний экран, начиная с iOS 16.4 (2023); часть ограничений (лимиты кеша, фоновая активность) сохраняется
  • Нет доступа к некоторым системным API (как у нативного приложения)
  • Нельзя публиковать в App Store напрямую (хотя Google Play — можно через TWA)

Кто использует: Telegram Web, Starbucks, AliExpress, Uber, Spotify.


Типы приложений — общая карта

ТипГде работаетТехнологииКогда подходит
MPA (Multi Page Application)БраузерHTML + серверный рендеринг (PHP, Rails)Контент-сайты, блоги, интернет-магазины
SPA (Single Page Application)БраузерReact, Vue, AngularДашборды, админки, web-apps
PWA (Progressive Web App)Браузер + “установка”SPA/MPA + Service Worker + ManifestЗамена мобильного приложения без магазина
SSR (Server-Side Rendering)БраузерNext.js, NuxtКогда нужен SEO + скорость первой загрузки
SSG (Static Site Generation)БраузерNext.js, Gatsby, AstroБлоги, документация, лендинги — контент редко меняется
Нативное мобильноеiOS / AndroidSwift, KotlinМаксимальная производительность, доступ к системным API
Кроссплатформенное мобильноеiOS + AndroidReact Native, FlutterОдна кодовая база, близко к нативному
WebView-приложениеiOS / AndroidCordova, CapacitorБыстрая мобильная обёртка над веб-стеком
Десктопное (Electron)Windows / macOS / LinuxHTML/CSS/JS + Node.jsДесктоп-приложение на веб-стеке
Десктопное нативноеWindows / macOS / LinuxC++, C#, SwiftМаксимальный контроль, системные приложения

SSR и SSG — коротко

SSR (Server-Side Rendering): страница рендерится на сервере при каждом запросе и отдаётся как готовый HTML. Хорош для SEO и быстрого первого рендера, но нагружает сервер.

SSG (Static Site Generation): страницы генерируются один раз во время сборки и отдаются как статические файлы. Максимально быстро, легко деплоить (хоть на GitHub Pages), но не подходит для динамического контента.

Современные фреймворки (Next.js, Nuxt) позволяют комбинировать подходы: одни страницы через SSG, другие через SSR, третьи как SPA — в зависимости от задачи.


Картографические библиотеки и API

Библиотека / APIОсобенность
Leaflet.jsЛёгкая, open-source, хорошо для OSM-тайлов
Google Maps APIМощный, платный сверх лимита
Mapbox GL JSВекторные тайлы, WebGL, красивые карты
Yandex Maps APIАктуально для RU/СНГ проектов
OpenLayersGIS-ориентирован, сложнее Leaflet