PWA — веб-приложения, которые применяют стратегию прогрессивного улучшения, то есть проверяют, поддерживает ли браузер те или иные Web API, и если да, то могут их использовать. Отсюда и название — прогрессивные веб-приложения.

Интересные факты

Термин был придуман в 2015 году инженером Google Алексом Расселом и его супругой Фрэнсис Берримэн.

Идея PWA не нова — главные концепции были заложены и реализованы еще в Palm webOS, Firefox OS и Chrome OS, где все приложения по сути являются веб-приложениями.

Еще в 2007, за 18 дней до выхода первого iPhone, Стив Джобс сформулировал идею приложений, которые создаются с использованием веб-технологий и доставляются через сеть. App Store изначально не планировался, а в течение первого года существования устройства не был доступен родной SDK.

Известные зарубежные PWA: Instagram, Twitter, Telegram, YouTube, AliExpress, Spotify, TikTok, Tinder, Pinterest, YouPorn, сервисы Google и Microsoft.

Популярные российские PWA: VK, Aviasales, 2GIS, ivi, Tinkoff, Trivago, DNS Shop, Sportmaster, Habr, Badoo, Zarplata.ru, сервисы Rambler и Mail.ru.
Кстати, у PWA есть одобренный сообществом логотип. Впервые на то, что у технологии нет своего логотипа в мае 2017 года обратил внимание DevRel компании Microsoft Максим Сальников и через Twitter организовал на GitHub конкурс на лучшее лого. Народным голосованием победил логотип от Диего Гонзалеза. В то время он был DevRel'ом команды Samsung Internet — одного из самых популярных браузеров для мобильных устройств в Азии, а с недавних пор Диего — DevRel команды Microsoft Edge.

Преимущества

Ведущий фронтенд-разработчик Меркури, евангелист и организатор русскоязычного сообщества PWA Алексей Родионов в рассказывает о преимуществах и недостатках прогрессивных веб-приложений.

Настоящая кроссплатформенность

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

Нативное поведение

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

Не требуют установки и обновлений

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

Меньший размер

PWA сами не реализовывают API — они лишь вызывают API, уже реализованные в браузере. При запуске они загружают необходимый минимум, а всё остальное подгружают по мере необходимости.

Децентрализованность, открытость и независимость

Веб — самая крупная платформа, больше, чем все остальные платформы вместе взятые. Чтобы распространять PWA не нужны магазины приложений, которые навязывают свои правила. Однако при желании PWA можно упаковать в легковесную нативную оболочку и опубликовать в Google Play, App Store и других магазинах.

Все преимущества веб-платформы

PWA — это сайт, а значит весь контент индексируется поисковиками. У каждой страницы есть URL, который можно скопировать и поделиться — это как deep linking «из коробки». Также пользователь может скопировать любой текст на экране и перевести на другой язык, изменить масштаб страницы, вырезать рекламу и много чего еще.

Безопасность

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

Низкий порог входа

Для написания PWA не нужно изучать проприетарные SDK, достаточно знать HTML, JS, CSS. Для разработки не требуется специальное оборудование, и можно даже обойтись без IDE и компилятора — JavaScript-код интерпретируется и может быть отлажен прямо в браузере.

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

Недостатки

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