Optimierung automatische Updates der Webanwendung bei Aktualisierung der Anwendung auf dem Server
This commit is contained in:
31
README.md
31
README.md
@@ -329,11 +329,40 @@ stehenbleiben, die nie angekommen ist. Diese Stelle (`mutate()` in
|
||||
|
||||
Speichert nur die Programmdateien, **nicht** die API-Antworten. Eine veraltete
|
||||
Liste aus dem Cache wäre schlimmer als gar keine. Das kontrollierte Vorhalten
|
||||
der Daten übernimmt in Phase 4 IndexedDB.
|
||||
der Daten übernimmt IndexedDB.
|
||||
|
||||
Bei Änderungen an den Dateien in `SHELL` muss `VERSION` in `sw.js` hochgezählt
|
||||
werden, sonst behalten installierte Clients die alte Fassung.
|
||||
|
||||
### Aktualisierung installierter Apps
|
||||
|
||||
Eine installierte PWA wird oft wochenlang nicht vollständig geschlossen. Der
|
||||
Browser lädt den Service Worker zwar im Hintergrund neu, aber der neue bleibt
|
||||
im Wartezustand, bis alle Fenster geschlossen sind – und die laufende Seite
|
||||
arbeitet weiter mit dem alten JavaScript. Für den Nutzer sieht es aus, als käme
|
||||
das Update nie an.
|
||||
|
||||
`web/html/js/update.js` löst das:
|
||||
|
||||
1. Nachfragen, ob etwas bereitliegt – beim Zurückkehren in den Vordergrund,
|
||||
bei Verbindungsrückkehr und alle 30 Minuten
|
||||
2. Wenn ja: unten ein Hinweis mit „Jetzt neu laden" und einem Kreuz zum
|
||||
Wegklicken
|
||||
3. Auf Klick übernimmt der neue Service Worker, und über `controllerchange`
|
||||
lädt die Seite **einmal** neu – auch in weiteren offenen Fenstern
|
||||
|
||||
**`skipWaiting()` steht nicht mehr im `install`-Ereignis.** Genau dort war der
|
||||
Fehler: Der neue Service Worker übernahm sofort die Kontrolle, während die
|
||||
geladene Seite noch mit dem alten JavaScript lief – gemischte Stände, und
|
||||
aktualisiert wurde trotzdem erst beim nächsten vollständigen Schließen. Jetzt
|
||||
wartet er, bis die Anwendung ihn ausdrücklich dazu auffordert.
|
||||
|
||||
**Kein ungefragtes Neuladen.** Ein erzwungener Neustart mitten in einer Eingabe
|
||||
würde den halb getippten Artikelnamen verlieren. Die Daten selbst sind sicher –
|
||||
sie liegen in der Outbox –, aber der Ärger wäre trotzdem da. Wer den Hinweis
|
||||
wegklickt, bekommt die neue Fassung beim nächsten Start; das geschieht ohnehin,
|
||||
sobald alle Fenster geschlossen sind.
|
||||
|
||||
### Auf dem Telefon installieren
|
||||
|
||||
Android/Chrome bietet „Zur Startseite hinzufügen" von selbst an. Bei iOS geht
|
||||
|
||||
Reference in New Issue
Block a user