Core Web Vitals
Googles Messgrößen für die Nutzererfahrung einer Webseite – bestehend aus Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS) und Interaction to Next Paint (INP).
Eine Webanwendung, die durch moderne Browser-APIs native App-Funktionen bietet – Offline-Nutzung, Installation auf dem Homescreen, Push-Benachrichtigungen – ohne App Store.
Native Apps (iOS/Android) haben Vorteile: Sie funktionieren offline, können auf dem Homescreen installiert werden und senden Push-Benachrichtigungen. Aber sie brauchen einen App Store, Review-Prozesse und separate Codebases für iOS und Android.
PWAs bringen diese Funktionen ins Web: Eine einzige Codebase, kein App Store, sofortige Updates. Der Nutzer besucht die Website, bekommt einen „Installieren”-Dialog und hat danach eine App-ähnliche Erfahrung – vollbild, ohne Browser-Chrome, mit eigenem App-Icon.
PWA vs. Native App:
| Aspekt | Native App | PWA |
|---|---|---|
| Installation | App Store | Browser-Dialog |
| Updates | App Store Review | Sofort |
| Offline | ✅ | ✅ (mit Service Worker) |
| Push-Benachrichtigungen | ✅ | ✅ (eingeschränkt auf iOS) |
| Hardware-Zugriff | Vollständig | Eingeschränkt |
| Codebase | iOS + Android | Eine für alle |
| Auffindbarkeit | App Store | Google-Suche |
PWA-Support ist auf Android deutlich besser als auf iOS:
| Feature | Android (Chrome) | iOS (Safari) |
|---|---|---|
| Installation | ✅ Vollständig | ✅ Seit iOS 16.4 |
| Push-Benachrichtigungen | ✅ | ✅ Seit iOS 16.4 |
| Background Sync | ✅ | ❌ |
| Bluetooth/NFC | ✅ | ❌ |
| Persistent Storage | ✅ | Begrenzt |
{
"name": "KI-Assistent",
"short_name": "Grundlagen",
"start_url": "/",
"display": "standalone",
"background_color": "#0f172a",
"theme_color": "#6366f1",
"icons": [
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" },
{ "src": "/icon-512-maskable.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
],
"screenshots": [
{ "src": "/screenshot-mobile.png", "sizes": "390x844", "type": "image/png", "form_factor": "narrow" }
]
}
Workbox bietet verschiedene Strategien je nach Ressourcentyp:
import { registerRoute } from 'workbox-routing';
import { CacheFirst, NetworkFirst, StaleWhileRevalidate } from 'workbox-strategies';
// Statische Assets: Cache First (lange Gültigkeit)
registerRoute(
({ request }) => request.destination === 'image',
new CacheFirst({ cacheName: 'images', plugins: [
new ExpirationPlugin({ maxAgeSeconds: 30 * 24 * 60 * 60 }) // 30 Tage
]})
);
// API-Calls: Network First (immer aktuell, Fallback auf Cache)
registerRoute(
({ url }) => url.pathname.startsWith('/api/'),
new NetworkFirst({ cacheName: 'api-cache' })
);
// HTML-Seiten: Stale While Revalidate (schnell + aktuell)
registerRoute(
({ request }) => request.mode === 'navigate',
new StaleWhileRevalidate({ cacheName: 'pages' })
);
// 1. Berechtigung anfragen
const permission = await Notification.requestPermission();
// 2. Service Worker registrieren und Push-Subscription erstellen
const registration = await navigator.serviceWorker.ready;
const subscription = await registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(PUBLIC_VAPID_KEY),
});
// 3. Subscription an Server senden
await fetch('/api/push/subscribe', {
method: 'POST',
body: JSON.stringify(subscription),
headers: { 'Content-Type': 'application/json' },
});
// 4. Im Service Worker: Push empfangen
self.addEventListener('push', (event) => {
const data = event.data.json();
event.waitUntil(
self.registration.showNotification(data.title, {
body: data.body,
icon: '/icon-192.png',
})
);
});
start_url im Manifestdisplay: standalone oder fullscreentheme_color gesetztEine PWA ist wie ein Schweizer Taschenmesser: Es sieht aus wie ein Messer, aber es hat auch Schere, Säge und Dosenöffner eingebaut. Eine normale Website ist nur das Messer – eine PWA hat alle Werkzeuge, die eine native App bietet, steckt aber im Web-Format.
Installierbar: Nutzer können die App auf dem Homescreen speichern
Offline-fähig: Service Worker cachen Inhalte für die Offline-Nutzung
Kein App Store nötig: Direkt über den Browser installierbar
KI-Tools ohne App Store
KI-Assistenten als PWA installierbar – kein App-Store-Review, sofortige Updates
Offline-First-Anwendungen
Notiz-Apps, Dokumenteneditor – funktionieren auch ohne Internet
Push-Benachrichtigungen
Nutzer über neue KI-Antworten oder Ergebnisse benachrichtigen, auch wenn die App nicht offen ist
Ein Service Worker ist ein JavaScript-Skript, das im Hintergrund läuft – unabhängig von der Webseite. Er kann Netzwerkanfragen abfangen und aus dem Cache beantworten, Push-Benachrichtigungen empfangen und Hintergrund-Synchronisation durchführen. Er ist das Herzstück jeder PWA.
Für viele Use Cases ja – besonders für Content-Apps, Tools und einfache Interaktionen. Grenzen gibt es bei Hardware-Zugriff (Bluetooth, NFC auf iOS eingeschränkt), App-Store-Präsenz und bestimmten iOS-Einschränkungen. Android unterstützt PWAs deutlich besser als iOS.
Eine JSON-Datei, die beschreibt, wie die PWA installiert werden soll: Name, Icons, Startseite, Anzeigemodus (Fullscreen, Standalone), Theme-Farbe. Der Browser liest dieses Manifest und zeigt den 'Zum Homescreen hinzufügen'-Dialog.