[Performance] isEligible re-filtert/sortiert die ganze History pro Kandidat #9

Closed
opened 2026-06-03 14:10:02 +02:00 by ferdi2go · 1 comment
Owner

Schweregrad: LOW–MEDIUM

Dateien: js/algorithm.js:49-57

Problem: Pro Tag × pro Mitarbeiter wird [...history, ...monthAssignments] neu erzeugt, gefiltert, gemappt und sortiert → O(Tage·Mitarbeiter·History). Bei ~20 MA/22 Tagen unkritisch, skaliert aber schlecht.

Fix: lastDate/Counts pro Mitarbeiter einmalig vor der Tagesschleife vorberechnen (Map).

**Schweregrad:** LOW–MEDIUM **Dateien:** `js/algorithm.js:49-57` **Problem:** Pro Tag × pro Mitarbeiter wird `[...history, ...monthAssignments]` neu erzeugt, gefiltert, gemappt und sortiert → O(Tage·Mitarbeiter·History). Bei ~20 MA/22 Tagen unkritisch, skaliert aber schlecht. **Fix:** `lastDate`/Counts pro Mitarbeiter einmalig vor der Tagesschleife vorberechnen (Map).
ferdi2go added the severity/lowperformance labels 2026-06-03 14:10:02 +02:00
Author
Owner

Behoben in c076b5e: histCount-Map einmal pro Generierung vorberechnet — scoreCandidate macht jetzt O(1)-Lookup statt History-Scan pro Kandidat. minGap ermittelt das letzte Datum per Single-Pass-Max statt Array-Spread + .sort(). Verhalten unverändert (alle Tests grün). Bewusst keine riskante inkrementelle Umstrukturierung des Scheduling-Kerns bei aktueller Skala.

Behoben in `c076b5e`: `histCount`-Map einmal pro Generierung vorberechnet — `scoreCandidate` macht jetzt O(1)-Lookup statt History-Scan pro Kandidat. minGap ermittelt das letzte Datum per Single-Pass-Max statt Array-Spread + `.sort()`. Verhalten unverändert (alle Tests grün). Bewusst keine riskante inkrementelle Umstrukturierung des Scheduling-Kerns bei aktueller Skala.
Sign in to join this conversation.