The per-job log collector was only cleared at start-upload — across a long session with many add-jobs-to-running-batch interactions (no new start-upload), the Map grew unbounded. At ~5000 tracked jobs that's 1 MB × 5 = 5 MB+ of stale history hanging around in the main process, bigger as ring buffers fill. Add a cap: when a new jobId would push size past 1000, evict the oldest entry (Map iteration order is insertion order per spec). 1000 × 200 entries/job × ~100 B/entry ≈ 20 MB worst case, properly bounded no matter how long the session runs. Per-job ring buffer (200 entries) unchanged; only the count of tracked jobs is now capped. The "Log anzeigen" modal still works for any job in the most-recent 1000 — older jobs return an empty array, which the renderer already displays as "Keine Log-Einträge".
1.3 KiB
1.3 KiB
Verbesserungs-Loop — open items
Released
- ✅ 3.3.0 — Performance-Fixes (queue-cap, sort-throttle, history-delegation, recent-cap) + Log-Recovery
- ✅ 3.3.1 —
removeFromQueueOnDonecoalesced via microtask (kein O(N²) mehr bei done-Bursts) - ✅ 3.3.2 —
fileuploader.logAuto-Rotation bei 50 MB (max 3 Backups: .1 .2 .3) - ✅ 3.3.3 —
_jobLogCollectorCap auf 1000 tracked jobs (FIFO-eviction beim Überschreiten)
Open items (priorisiert)
Performance
applyQueueSelectionClasses(renderer/app.js:891) —tbody.querySelectorAllbei jedem Klick. Bei 5000-Jobs-Queue O(N) per click. Cache last rendered range.
Code-Qualität
- Test-Coverage für 3.3.0 — keine Tests für die queue-cap-prune-Logik in handleBatchDone, sortQueueJobs dynamic-throttle, log-error-recovery.
UX-Politur
- CSS
.queue-rowtransition auf:hoverscopen (aktuell auf jedem row → unnötiger Repaint bei Status-Flip). - Module-level Sets
_sessionTrackedJobs/_sessionDoneJobs/_completedUploadKeyswerden nie geleert — minor memory growth.
Loop-Notes
- Cron-Job
01e33ae1läuft alle 30min (:07/:37), Session-only. - Pro Iteration: GENAU EIN Issue. Auto-Release bei grünen Tests. Boundary: keine Features, keine Major-Refactors.