Доповідач

Олександр Блажейко

Full Stack розробник
7 років — досвіду в комерційній розробці
Vue.js — основний фронтенд-стек
Node.js — серверна частина та API
Тема: PWA у WEB

Що таке PWA?

Progressive Web Application

PWA — це вебзастосунок, побудований на звичайних веб-технологіях (HTML, CSS, JavaScript), який поводиться як нативний мобільний чи десктопний додаток. Користувач відкриває його у браузері, але може встановити на пристрій, працювати офлайн та отримувати сповіщення.

Доступність вебу — одне посилання, без магазину застосунків
UX нативного — іконка на екрані, повноекранний режим
Швидкість — кешування та миттєве завантаження
WEB
+
APP
= Progressive Web App

Ключові характеристики

Робота офлайн

Service Worker кешує ресурси — застосунок працює навіть без мережі.

Встановлюваність

Додається на домашній екран без магазину застосунків.

Push-сповіщення

Повертають користувачів навіть при закритому застосунку.

Висока швидкість

Миттєве завантаження завдяки кешу та оптимізації ресурсів.

Безпека (HTTPS)

Обовʼязкове захищене зʼєднання для всіх можливостей.

Адаптивність

Один код для мобільних, планшетів і десктопів.

Як це працює: 3 опори

Будь-який PWA тримається на трьох обовʼязкових компонентах.

01

Service Worker

JS-скрипт, що працює у фоні окремо від сторінки. Перехоплює мережеві запити, кешує відповіді й забезпечує офлайн-режим та фонову синхронізацію.

02

Web App Manifest

JSON-файл з метаданими: назва, іконки, кольори, режим відображення. Саме він дозволяє встановити застосунок на пристрій.

03

HTTPS

Захищене зʼєднання — обовʼязкова умова. Без нього Service Worker і більшість можливостей PWA не активуються.

Web App Manifest

Конфігураційний JSON, що описує, як застосунок виглядає після встановлення.

manifest.json
  • name / short_name — повна та скорочена назва на іконці.
  • start_url — сторінка, що відкривається при запуску.
  • display: standalone — без адресного рядка, як нативний.
  • icons — набори іконок під різні роздільності.
  • Підключається через <link rel="manifest">.
{
  "name": "PWA Demo — Олександр Блажейко",
  "short_name": "PWA Demo",
  "start_url": "/index.html",
  "display": "standalone",
  "background_color": "#0B1F2A",
  "theme_color": "#0D9488",
  "orientation": "portrait",
  "lang": "uk",
  "icons": [
    {
      "src": "/icons/icon-192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "/icons/icon-512.png",
      "sizes": "512x512",
      "type": "image/png",
      "purpose": "any maskable"
    }
  ]
}

Service Worker

Скрипт-посередник між застосунком і мережею — кешує ресурси й дає офлайн.

service-worker.js
  • install — попередньо кешує ключові файли.
  • activate — чистить застарілі версії кешу.
  • fetch — стратегія «спершу кеш, потім мережа».
  • Реєструється з основного скрипту сторінки.
const CACHE = "pwa-cache-v1";
const ASSETS = ["/", "/index.html", "/app.js", "/style.css"];

// 1. Встановлення — кешуємо оболонку застосунку
self.addEventListener("install", (e) => {
  e.waitUntil(
    caches.open(CACHE).then((c) => c.addAll(ASSETS))
  );
});

// 2. Активація — видаляємо старі кеші
self.addEventListener("activate", (e) => {
  e.waitUntil(
    caches.keys().then((keys) =>
      Promise.all(keys
        .filter((k) => k !== CACHE)
        .map((k) => caches.delete(k)))
    )
  );
});

// 3. Запити — спершу кеш, інакше мережа
self.addEventListener("fetch", (e) => {
  e.respondWith(
    caches.match(e.request).then(
      (hit) => hit || fetch(e.request)
    )
  );
});

Підключення в застосунку

Два рядки у HTML та реєстрація Service Worker зв'язують усе разом.

index.html
<link rel="manifest" href="/manifest.json">
<meta name="theme-color"
      content="#0D9488">
app.js
if ("serviceWorker" in navigator) {
  navigator.serviceWorker
    .register("/service-worker.js")
    .then((reg) =>
      console.log("SW зареєстровано", reg.scope))
    .catch((err) =>
      console.error("Помилка SW", err));
}

Переваги для бізнесу та користувача

1 кодова база
замість окремих iOS / Android / Web
~70%
менше відмов завдяки швидкому старту
0 store
встановлення прямо з браузера
Швидкий запуск і плавна робота
Краще SEO та індексація пошуковиками
Економія на окремій нативній розробці
Повторне залучення через push-сповіщення
Легке оновлення — без перевидання у store
Менший розмір, ніж нативний застосунок

PWA vs Нативний vs Веб

КритерійPWAНативнийВеб-сайт
Встановлення на пристрій
Робота офлайн
Публікація у storeНе обовʼязковоОбовʼязково
Вартість розробкиНизькаВисокаНизька
ОновленняМиттєвеЧерез storeМиттєве
Доступ до апаратуриЧастковийПовнийОбмежений

Де застосовують PWA

Великі продукти переходять на PWA заради швидкості та охоплення.

E-commerce

Інтернет-магазини: швидкі покупки, кошик офлайн, push про знижки.

Медіа та новини

Читання статей офлайн і миттєве завантаження стрічки.

Стрімінг та сервіси

Музика, відео, соцмережі з нативним відчуттям у браузері.

Наскільки далеко зайшов PWA

Сучасні Web API дають PWA доступ до можливостей, що раніше були лише в нативних застосунків. Два проєкти показують це наживо.

What PWA Can Do Today

Інтерактивний showcase можливостей PWA, який сам є встановлюваним PWA. Відкрийте його на своєму пристрої — і побачите наживо, які API підтримує саме ваш браузер.

Демонструє: камеру й геолокацію, Bluetooth і NFC, доступ до контактів і файлової системи, WebAuthn (відбиток / passkey), push-сповіщення тощо.

whatpwacando.today ↗

Project Fugu API Showcase

Каталог від Chrome із реальними застосунками, що використовують API з ініціативи Project Fugu — зусиль закрити розрив у можливостях між вебом і нативом.

Охоплює API: File System Access, Web Bluetooth, WebUSB, Web Serial, Web HID, Web NFC, Badging, Window Controls Overlay та десятки інших.

developer.chrome.com · fugu-showcase ↗

Висновок

PWA поєднує охоплення вебу зі зручністю нативних застосунків. Це швидкий, надійний і встановлюваний продукт з однією кодовою базою — оптимальний вибір для сучасних веб-проєктів.

Швидко Офлайн Встановлюється Економно
Олександр Блажейко
Full Stack розробник · Vue.js / Node.js
Дякую за увагу!
1 / 12