Problem:saveState schreibt bei jedem Change synchron das komplette JSON. Das ~500 KB XLSX-Script blockiert im <head> das Parsing, obwohl nur für Im-/Export gebraucht.
Fix:saveState um ~300–500 ms debouncen; XLSX-Script defer setzen oder per import() erst bei Bedarf laden.
**Schweregrad:** LOW
**Dateien:** `js/app.js:33-40` (aufgerufen u.a. `js/employees.js:191`, `js/calendar.js:270`), `index.html:11`
**Problem:** `saveState` schreibt bei jedem Change synchron das komplette JSON. Das ~500 KB XLSX-Script blockiert im `<head>` das Parsing, obwohl nur für Im-/Export gebraucht.
**Fix:** `saveState` um ~300–500 ms debouncen; XLSX-Script `defer` setzen oder per `import()` erst bei Bedarf laden.
Behoben in 0efb9cb: saveState debounced (~400 ms), bündelt schnelle Änderungen; ausstehender Write wird bei beforeunload und visibilitychange→hidden geflusht (kein Verlust der letzten Änderung, konsistent mit #4). SheetJS-Script mit defer (nicht mehr render-blockierend); typeof XLSX-Guard deckt den Lade-Fall ab. Headless ohne Fehler verifiziert.
Behoben in `0efb9cb`: `saveState` debounced (~400 ms), bündelt schnelle Änderungen; ausstehender Write wird bei `beforeunload` und `visibilitychange`→hidden geflusht (kein Verlust der letzten Änderung, konsistent mit #4). SheetJS-Script mit `defer` (nicht mehr render-blockierend); `typeof XLSX`-Guard deckt den Lade-Fall ab. Headless ohne Fehler verifiziert.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Schweregrad: LOW
Dateien:
js/app.js:33-40(aufgerufen u.a.js/employees.js:191,js/calendar.js:270),index.html:11Problem:
saveStateschreibt bei jedem Change synchron das komplette JSON. Das ~500 KB XLSX-Script blockiert im<head>das Parsing, obwohl nur für Im-/Export gebraucht.Fix:
saveStateum ~300–500 ms debouncen; XLSX-Scriptdefersetzen oder perimport()erst bei Bedarf laden.Behoben in
0efb9cb:saveStatedebounced (~400 ms), bündelt schnelle Änderungen; ausstehender Write wird beibeforeunloadundvisibilitychange→hidden geflusht (kein Verlust der letzten Änderung, konsistent mit #4). SheetJS-Script mitdefer(nicht mehr render-blockierend);typeof XLSX-Guard deckt den Lade-Fall ab. Headless ohne Fehler verifiziert.