diff --git a/backend/docs/client-live-editing-instructions.md b/backend/docs/client-live-editing-instructions.md index 9962472..a7eb2b2 100644 --- a/backend/docs/client-live-editing-instructions.md +++ b/backend/docs/client-live-editing-instructions.md @@ -224,7 +224,17 @@ hält den Ablauf, `app.js` nur die Verdrahtung. der Schutz. Nur **eine** Feed-Anfrage gleichzeitig; `AbortController` benutzen und beim -Dokumentwechsel/Unmount abbrechen. `status = 'offline'` gilt, sobald ein +Dokumentwechsel/Unmount abbrechen. + +**Der Feed läuft nur im sichtbaren Tab.** Bei `visibilitychange` auf verborgen +die Verbindung schließen, beim Zurückkommen einmal mit dem eigenen `since` +nachholen und weiterpollen. Grund: Der Zielserver bietet **kein HTTP/2** +(gemessen), also gilt das Browser-Limit von sechs Verbindungen je Herkunft — +ein dauerhaft offener Long-Poll je Tab engt bei mehreren Tabs alles andere +ein. Ein Tab im Hintergrund braucht ohnehin keinen Live-Feed: Niemand schaut +hin, und beim Sichtbarwerden holt ein einziger Request den ganzen Rückstand. +Spart nebenbei Server-Worker und Akku. Der Editor hört für die Höhenmessung +schon auf `visibilitychange` (D17-Nachtrag 4) — die Stelle gibt es also. `status = 'offline'` gilt, sobald ein Request am Netz scheitert, und endet mit der nächsten erfolgreichen Antwort; lokale Änderungen bleiben dabei erhalten und werden danach normal geflusht. diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 3459ed4..2ec2e78 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -5927,8 +5927,15 @@ Antwort am Ende des Wartens. Drei Befunde bleiben als Arbeit stehen. **Kein HTTP/2** — damit gilt das Browser-Limit von sechs Verbindungen je Herkunft, und mehrere Tabs derselben -Person binden je eine dauerhaft; zu beheben serverseitig oder clientseitig -über einen SharedWorker, der allen Tabs eine gemeinsame Feed-Verbindung gibt. +Person binden je eine dauerhaft. **Entschieden: Der Feed läuft nur im +sichtbaren Tab** — bei `visibilitychange` schließen, beim Zurückkommen einmal +mit dem eigenen `since` nachholen. Ein Hintergrund-Tab braucht keinen +Live-Feed, niemand schaut hin, und ein einziger Request holt den Rückstand; +das spart nebenbei Server-Worker und Akku. Erwogen und verworfen war ein +**SharedWorker**, der allen Tabs eine gemeinsame Verbindung gibt — technisch +sauberer und auch für Hintergrund-Tabs aktuell, aber eine eigene Baustelle +mit Nachrichtenprotokoll, Lebenszyklus und Rückfallpfad, für ein Problem, das +die einfache Lösung praktisch ganz beseitigt. **Nur Java 17** installiert, während `build.gradle.kts` `JavaLanguageVersion.of(21)` verlangt. Und der **Weg vom Apache zum Backend ist ungeklärt**: `ProxyPass` ist in `.htaccess` nicht zulässig,