- Footer-Schriftzug (FlickeringGrid): Textmaske einmal pro Größe statt
~14.500 getImageData-Aufrufe pro Frame, nur flackernde Quadrate neu
zeichnen (69–86 ms -> 0,1–0,2 ms pro Frame, Darstellung pixelgleich)
- PixelBlast: WebGL erst in Viewport-Nähe anlegen, unsichtbar pausieren
(autoPauseOffscreen war nie angeschlossen), Shader asynchron kompilieren,
beim Unmount aufräumen (Render-Schleifen liefen nach Seitenwechsel
weiter); kein MSAA, keine erzwungene High-Performance-GPU
- Silk (Hero): nur rendern, solange sichtbar; DPR max. 1,5
- LightRays: keine verwaiste Render-Schleife mehr bei schnellem Vorbeiscrollen
- BorderGlow (Kontaktkarte): Sweep nur, solange die Karte sichtbar ist
- Silk, PixelBlast, LightRays als eigene Chunks (React.lazy):
Haupt-Bundle 1,6 MB -> 646 KB (gzip 470 -> 207 KB)
- backgroud_effect und Emailsorter-Vorschaubild als WebP
(974 KB -> 15 KB, 1,2 MB -> 11 KB), Projekt-Vorschaubilder lazy
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Statistik-Zeile im Hero zeigte fest "10+ Projekte". Sie hängt jetzt
am selben /api/projects wie der Abschnitt "Projekte" (gleicher
react-query queryKey, also weiterhin nur ein Request) und zählt die
Repositories, die tatsächlich in Gitea liegen. Fallback bleibt 10,
falls die API nicht antwortet.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>