Mit der Progressive Web App Technologie lassen sich JavaScript Web-Anwendungen einfach auf mobile Geräte erweitern. Durch Offline-Modus, blitzschnellem Laden, Push-Benachrichtigungen sowie der Nutzbarkeit fast aller Hardwareelemente (z.B. Kamera) fühlen sich diese Anwendungen wie native Mobilanwendungen an.
Solche Anwendungen müssen nicht aus einem App-Shop heraus installiert werden, sondern lassen sich direkt von einer aufgerufenen Web-Anwendung im Browser mit einem Klick als App zum Startbildschirm mobiler Android und iOS Geräte hinzufügen.
An einem praktischen Beispiel sehen wir uns die einzelnen Schritte zu einer Progressive Web App an. Wir kombinieren die optimalen Tools für die Client-Entwicklung mit IBM Domino als REST- und Webserver und bündeln die gesamte Anwendung in einer nsf.
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
2019 DNUG #46: Mobil bis Desktop auf einen Schlag – Web-Anwendungen zu Progressiven Web Apps (PWA) erweitern
1.
2. 06.06.2019 2www.leonso.de
Knut Herrmann
Senior Software Architekt
Leonso GmbH
Notes Domino Entwickler
seit Version 2
Web Anwendungsentwickler
StackOverflow >850 Antworten
E-Mail: knut.herrmann@leonso.de / Twitter: @KnutHerrmann / Skype: knut.herrmann
2018 und 2019
3. 06.06.2019 3www.leonso.de
Vielen Dank an
Paul Harrison
Eight Dot Three Ltd
Co-Ersteller und -Vortragender eines ähnlichen
Vortrags zur engage.ug 2018 und ICONUK 2018
4. 06.06.2019 4www.leonso.de
System für Bauprojektmanagement
Bauplanung
Vertragsmanagement
Bautagebuch
Protokolle
Finanzkontrolle
Dokumentation
Qualitätsmanagement
…
Mein aktuelles Projekt
6. 06.06.2019 6www.leonso.de
Mein aktuelles Projekt
Desktop
Laptop
Tablet
Mobile
Anforderung:
Anwendung muss immer und überall funktionieren
Windows
macOS
iOS
Android
…
18. 06.06.2019 18www.leonso.de
Service Worker
JavaScript Code
läuft unabhängig vom Anwendungscode
fängt Netzwerkanfragen ab und behandelt sie
reagiert auf Ereignisse
sendet Benachrichtigungen
updatet sich selbst
19. 06.06.2019 19www.leonso.de
Service Worker
wird in Anwendungscode registriert (index.js):
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('./service-worker.js')
.then(registration => {
console.log(`Service Worker registered! Scope:
${registration.scope}`);
})
.catch(err => {
console.log(`Service Worker registration failed:
${err}`);
});
}
20. 06.06.2019 20www.leonso.de
Service Worker
install – alle notwendigen Dateien werden gecachet
activate – wird aktiviert, initialisiert Daten im Cache
Idle – wartet auf einen Event (fetch / message / push)
fetch - behandelt Netzwerk-Requests
message – 2-Wege-Kommunikation mit Web Anwendung
push – Meldungen vom Server
Lebenszyklus
22. 06.06.2019 22www.leonso.de
Service Worker
self.addEventListener('activate', function(e) {
// initialisiere oder bereinige Cache
});
self.addEventListener('fetch', function(e) {
// Beispiel für ”Cache first, Network fallback”
e.respondWith(
caches.match(e.request).then(function(response) {
return response || fetch(e.request);
})
);
});
23. Cache API
speichert Request/Response Objekte-Paare
gecachete Daten bleiben gespeichert
bis sie gelöscht oder überschrieben werden
06.06.2019 23www.leonso.de
24. Cache Strategien
Cache only
Cache first, Network fallback
Network first, Cache fallback
Cache / network race
Network only
06.06.2019 24www.leonso.de
Cache API
26. Speicher-Limit für Cache und IndexedDB
Quelle: https://developers.google.com/web/fundamentals/instant-and-offline/web-storage/offline-for-pwa
Browser Limit
Chrome < 6% des freien Plattenplatzes
Firefox < 10% des freien Plattenplatzes
Safari mobile < 50MB
Safari desktop freier Plattenplatz
Edge abhängig von Plattenplatz
06.06.2019 26www.leonso.de
Cache API und IndexedDB
27. weitere APIs
Notifications API
Push API
Background Sync API
Credential Management API
Payment Request API
06.06.2019 27www.leonso.de
28. Quelle: Google IO 2018
06.06.2019 28www.leonso.de
Browser Kompatibilität
29. What Web Can Do Today
Can I use Service Worker
06.06.2019 29www.leonso.de
Browser Kompatibilität
31. Chrome DevTools - Application
aktuelles Web App Manifest
Status Service Worker und Optionen um:
Service Worker sofort neu zu laden
Service Worker bei Netzwerk-Aktionen zu umgehen
Netzwerk offline zu setzen
Cache und Datenbank löschen
06.06.2019 31www.leonso.de
Entwickler-Tools
37. + SSL auf Domino Server aktivieren
+ Zusatz in index.html
<noscript>
JavaScript muss aktiviert sein, um diese
Anwendung nutzen zu können.
</noscript>
06.06.2019 37www.leonso.de
Demo
38. + https
+ Hinweis JavaScript zu aktivieren
PWA
06.06.2019 38www.leonso.de
Audit mit Lighthouse
Demo
43. + Service Worker mit
service-worker.js
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
workbox.precaching.precacheAndRoute([]);
index.js
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('./service-worker.js')
.then(registration => {
console.log(`Service Worker registered! Scope: ${registration.scope}`);
})
.catch(err => {
console.log(`Service Worker registration failed: ${err}`);
});
}
[ ] wird automatisch
mit der Liste der statischen
Dateien *.js, *.html, *.css
während des Builds gefüllt
06.06.2019 43www.leonso.de
Demo
53. Zusammenfassung
PWAs sind einfach zu implementieren
ein Code für alle Geräte und Betriebssysteme
keine App-Stores notwendig
implizite Updates
zukunftsorientiert - PWAs können neue Browser-
Möglichkeiten nutzen, wenn und sobald sie verfügbar sind
06.06.2019 53www.leonso.de