Что такое прогрессивное веб-приложение

Урок объясняет, что такое PWA и почему обычный сайт можно превратить в устанавливаемое приложение.

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

Зачем это нужно

Раньше выбор был жёстким: либо ты делаешь сайт (доступен по ссылке, но «не настоящее приложение»), либо нативное приложение (есть на домашнем экране, работает офлайн, шлёт уведомления, но требует магазина приложений, отдельной разработки под iOS и Android и установки). PWA стирает эту границу. Это по-прежнему сайт — один код, одна ссылка, индексируется поисковиком — но с возможностями нативного приложения.

Слово «прогрессивное» здесь ключевое. Идея в прогрессивном улучшении: приложение работает у всех как обычный сайт, а там, где браузер поддерживает дополнительные API, включаются бонусы — офлайн, установка, push. Старый браузер просто не получит этих бонусов, но сайт не сломается.

Три кита PWA

Технически PWA держится на трёх вещах:

  • HTTPS — защищённое соединение. Без него ключевые API недоступны (об этом отдельный урок).
  • Веб-манифест (manifest.json) — JSON-файл с именем приложения, иконками и настройками отображения. Он делает приложение устанавливаемым.
  • Service Worker — фоновый скрипт, который перехватывает сетевые запросы и умеет отдавать ответы из кеша. Он даёт офлайн-режим и фоновые возможности.

Всё остальное — push-уведомления, фоновая синхронизация, доступ к хранилищам — это надстройки поверх этих трёх основ.

Как это выглядит для пользователя

Пользователь заходит на сайт. Через какое-то время браузер замечает, что сайт соответствует критериям PWA, и предлагает «Установить приложение». После установки на домашнем экране появляется иконка — как у обычного приложения. При запуске оно открывается без адресной строки браузера, в своём окне. Если интернет пропал — приложение всё равно открывается и показывает закешированный контент.

Обычный сайт         PWA
---------------      ---------------------------
открыть в браузере   иконка на домашнем экране
нужен интернет       работает офлайн
нет уведомлений      push-уведомления
адресная строка      отдельное окно (standalone)

Как работает под капотом

Магия PWA — это Service Worker, отдельный JavaScript-поток, который браузер запускает в фоне и связывает с вашим сайтом. Он живёт между приложением и сетью: каждый запрос (за HTML, картинкой, API) проходит через него. Service Worker может ответить «вот из кеша», «схожу в сеть», «сеть недоступна — вот офлайн-страница». Именно поэтому PWA продолжает работать без интернета — отвечает Service Worker, а не сервер.

Манифест же — это просто метаданные. Когда браузер видит подключённый manifest.json и зарегистрированный Service Worker по HTTPS, он считает сайт «устанавливаемым» и показывает соответствующую кнопку.

Частые ошибки

  • Считать, что PWA — это новый фреймворк. Нет, это набор браузерных возможностей. Вы можете сделать PWA на React, Vue, Angular или вообще на чистом HTML.
  • Думать, что нужен магазин приложений. PWA устанавливается прямо из браузера, без App Store или Google Play (хотя при желании PWA можно и опубликовать в магазинах).
  • Ожидать офлайн «из коробки». Офлайн не появляется сам — его нужно явно реализовать в Service Worker через кеширование.

Итоги

  • PWA — это сайт с возможностями нативного приложения, без отдельной разработки под платформы.
  • Три основы: HTTPS, веб-манифест, Service Worker.
  • «Прогрессивное» = работает у всех, а бонусы включаются там, где браузер их поддерживает.
  • Офлайн обеспечивает Service Worker, устанавливаемость — манифест.
Проверьте себя
1. Что из перечисленного НЕ является одной из трёх основ PWA?
AHTTPS
BВеб-манифест (manifest.json)
CService Worker
DПубликация в App Store
2. Что означает слово «прогрессивное» в названии PWA?
AПриложение постоянно обновляется
BРаботает у всех как сайт, а дополнительные возможности включаются там, где браузер их поддерживает
CИспользует только новейшие браузеры
DПрогрессивно загружает картинки
3. Благодаря чему PWA продолжает открываться без интернета?
AБраузер сам сохраняет все сайты
BService Worker перехватывает запросы и отдаёт ответы из кеша
CМанифест хранит копию страницы
DHTTPS кеширует данные