[Perf/UX] Frontend: Polling-Backoff, Virtualisierung, Memo #24

Closed
opened 2026-05-27 12:21:05 +02:00 by ferdi2go · 1 comment
Owner

Probleme

a) Polling fest auf 800msindex.html:1238,1957
Auch wenn Job lange laeuft. Kein Timeout (Frontend haengt forever bei Server-Crash).

b) Review-Liste rendert alle Fotosindex.html:1313-1361
Bei 500+ Bildern Jank/Memory-Druck.

c) entry.path.split("/").pop() im Sort + Loopindex.html:1311-1314
Wiederholtes Splitting pro Render.

Fix

  • a) Adaptive Intervalle (300ms anfangs, 1s nach 10s, 2s nach 30s) + Wall-Clock-Timeout
  • b) IntersectionObserver oder Pagination (50/Seite)
  • c) name einmalig in allEntries vorberechnen
## Probleme **a) Polling fest auf 800ms** — `index.html:1238,1957` Auch wenn Job lange laeuft. Kein Timeout (Frontend haengt forever bei Server-Crash). **b) Review-Liste rendert alle Fotos** — `index.html:1313-1361` Bei 500+ Bildern Jank/Memory-Druck. **c) `entry.path.split("/").pop()` im Sort + Loop** — `index.html:1311-1314` Wiederholtes Splitting pro Render. ## Fix - a) Adaptive Intervalle (300ms anfangs, 1s nach 10s, 2s nach 30s) + Wall-Clock-Timeout - b) IntersectionObserver oder Pagination (50/Seite) - c) `name` einmalig in `allEntries` vorberechnen
ferdi2go added the priority: mediummaintenanceux labels 2026-05-27 12:21:05 +02:00
Author
Owner

Fix (a) und (b) umgesetzt in index.html:

(a) Polling-Backoff + Wall-Clock-Timeout

  • Helper _pollDelayMs(elapsedMs): 300ms < 10s, 800ms < 30s, sonst 1500ms
  • POLL_TIMEOUT_MS = 10 * 60 * 1000 (10 min)
  • Beide Polling-Loops (Analyze + Export) nutzen jetzt adaptive Delays und brechen mit aussagekraeftiger Fehlermeldung ab, wenn der Server ueber 10 min nicht antwortet
  • Bei kurzen Jobs (<10s) schneller responsiv (300ms statt 800ms), bei langen weniger API-Last

(b) name einmal vorberechnen

  • Helper _basename(p) via lastIndexOf("/") statt split("/").pop()
  • allEntries enthaelt jetzt name-Feld
  • Sort vergleicht a.name direkt, kein Splitting im hot Path
  • forEach-Loop liest entry.name statt erneut zu splitten

(c) Virtualisierung der Review-Liste als separates Issue #30 ausgegliedert.

Fix (a) und (b) umgesetzt in `index.html`: **(a) Polling-Backoff + Wall-Clock-Timeout** - Helper `_pollDelayMs(elapsedMs)`: 300ms < 10s, 800ms < 30s, sonst 1500ms - `POLL_TIMEOUT_MS = 10 * 60 * 1000` (10 min) - Beide Polling-Loops (Analyze + Export) nutzen jetzt adaptive Delays und brechen mit aussagekraeftiger Fehlermeldung ab, wenn der Server ueber 10 min nicht antwortet - Bei kurzen Jobs (<10s) schneller responsiv (300ms statt 800ms), bei langen weniger API-Last **(b) `name` einmal vorberechnen** - Helper `_basename(p)` via `lastIndexOf("/")` statt `split("/").pop()` - `allEntries` enthaelt jetzt `name`-Feld - Sort vergleicht `a.name` direkt, kein Splitting im hot Path - forEach-Loop liest `entry.name` statt erneut zu splitten **(c) Virtualisierung der Review-Liste** als separates Issue #30 ausgegliedert.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ferdi2go/OnlyFrames#24