Performance
React
Web Vitals
Optimization
Frontend
DevTools

Webleistung: React-Anwendungen für hohe Leistung optimieren

Leistung ist keine optionale Funktion, sondern eine Grundvoraussetzung. Es wirkt sich auf die Konvertierungs-, Aufbewahrungs- und Infrastrukturkosten aus und gehört daher…

Webleistung: React-Anwendungen für hohe Leistung optimieren

Leistung ist keine optionale Funktion, sondern eine Grundvoraussetzung. Es wirkt sich auf die Konvertierungs-, Aufbewahrungs- und Infrastrukturkosten aus und gehört daher in die Produktdiskussion und nicht nur in die Technik. Dieser Leitfaden befasst sich konzeptionell mit den Strategien, die schnelle React-Anwendungen in der Produktion unterstützen.

Leistung messen: Web Vitals

Was Sie nicht messen, können Sie nicht optimieren. Bei den Core Web Vitals handelt es sich um eine Reihe von Kennzahlen, die Google als Referenz für das Nutzererlebnis etabliert hat und die als Kompass gelten.

Largest Contentful Paint (LCP) misst die Zeit, bis das größte Inhaltselement gerendert ist, es ist der Proxy für „wann die Seite fertig aussieht“. Unter 2,5 Sekunden gilt als gut; zwischen 2,5 und 4 Sekunden verbesserungswürdig; über 4 Sekunden ist schlecht.

First Input Delay (FID) misst die Zeit zwischen der ersten Interaktion des Benutzers und der Antwort des Browsers, also wie reaktionsschnell sich die Seite anfühlt. Unter 100 ms ist gut; zwischen 100 und 300 ms verbesserungswürdig; über 300 ms ist schlecht.

Cumulative Layout Shift (CLS) misst die visuelle Stabilität der Seite, also wie stark der Inhalt beim Laden „springt“. Unter 0,1 ist gut; zwischen 0,1 und 0,25 verbesserungswürdig; über 0,25 ist schlecht.

Die Praxis, die eine kontinuierliche Verbesserung unterstützt, besteht darin, diese Kennzahlen vor Ort mit echten Benutzern zu sammeln (Real User Monitoring) und sie an ein Analysetool zu senden. Messungen im Labor helfen bei der Diagnose, aber nur Felddaten offenbaren die Erfahrung, die tatsächlich auf den Geräten und Netzwerken der Benutzer geschieht.

Code-Splitting und Lazy Loading

Der größte Feind der anfänglichen Ladezeit ist das monolithische Paket, das Code auf einmal liefert, den der Benutzer erst später oder nie benötigt. Durch die Aufteilung des Codes wird dieses Problem an drei Fronten gelöst.

Division by Route lädt den Code jeder Seite nur, wenn der Benutzer dorthin navigiert, und zeigt während des Übergangs eine Ladeanzeige an. Split by Component wendet das gleiche Prinzip auf schwere Komponenten an: Ein komplexes Diagramm oder eine umfangreiche Datentabelle wird nur dann heruntergeladen, wenn sie tatsächlich ins Spiel kommt. Und dynamische Importe bringen die Idee auf die Interaktionsebene: Eine Exportbibliothek für Excel beispielsweise wird erst geladen, wenn der Benutzer auf „Exportieren“ klickt; Kartenlastige Bibliotheken oder bedingte Polyfüllungen folgen derselben Logik. Eine elegante ergänzende Technik ist das absichtliche Vorladen, das mit dem Herunterladen der Produktdetails beginnt, wenn der Cursor über den Link fährt, und so die Navigation vorwegnimmt, ohne das anfängliche Laden zu benachteiligen.

Rendering-Optimierung in React

Selbst mit dem schlanken Bündel beeinträchtigen unnötige erneute Renderings die Fließfähigkeit. Das Auswendiglernen ist hier das zentrale Werkzeug.

Aufwändige Berechnungen, das Filtern und Sortieren großer Listen und das Aggregieren von Statistiken müssen gespeichert und nur dann neu berechnet werden, wenn sich ihre Abhängigkeiten ändern. Reine Komponenten können so gespeichert werden, dass sie nicht erneut gerendert werden, wenn sich ihre Eigenschaften nicht geändert haben. Und an untergeordnete Komponenten weitergeleitete Rückrufe müssen stabilisiert werden, um zu verhindern, dass bei jedem Rendering eine neue Funktion kaskadierende erneute Renderings auslöst. Achten Sie darauf, dass Sie nicht reflexartig auswendig lernen: Auswendiglernen ist kostspielig, und die Anwendung dort, wo es keinen Engpass gibt, erhöht nur die Komplexität.

Bei sehr langen Listen ist die Virtualisierung entscheidend. Anstatt Tausende von Elementen im DOM zu rendern, rendert es nur das sichtbare Fenster und recycelt Elemente, während der Benutzer scrollt. Der Gewinn an Gedächtnis und Flüssigkeit ist dramatisch und besteht sowohl für Listen mit fester Höhe als auch für Listen mit variabler Höhe.

Bildoptimierung

Bilder haben normalerweise das größte Gewicht auf einer Seite. Drei Praktiken machen den größten Teil des Gewinns aus.

Die erste besteht darin, responsive Bilder bereitzustellen: Bereitstellung der geeigneten Größe für das Gerät und die Bildschirmdichte, mit vorrangigem Laden für das Hauptbild (above thefold) und verzögertem Laden für den Rest, idealerweise mit einem unscharfen Platzhalter, der das Überspringen des Layouts vermeidet. Die zweite besteht darin, moderne Formate wie AVIF und WebP zu übernehmen und in Browsern, die diese nicht unterstützen, auf JPEG zurückzugreifen. Die Bandbreiteneinsparungen sind erheblich, ohne dass es zu spürbaren Qualitätsverlusten kommt. Das dritte ist das Lazy Loading von Bildern außerhalb des Ansichtsfensters, die erst dann in das Netzwerk gelangen, wenn sie sich dem sichtbaren Bereich nähern.

Optimierung der Bündelgröße

Die Reduzierung des Bündels ist eine fortlaufende Arbeit. Bundle-Analysatoren zeigen, was die Sache belastet, nämlich oft eine große Abhängigkeit, die vollständig importiert wurde, obwohl nur eine Funktion benötigt wurde. Tree Shaking hängt davon ab, dass nur das importiert wird, was Sie verwenden: das Einbringen einer einzelnen Funktion aus einer Bibliothek anstelle des gesamten Pakets oder das Ersetzen starker Abhängigkeiten durch schlanke Alternativen und proprietäre Dienstprogramme. Große und spezifische Bibliotheken, Karten und Tabellenkalkulationsprozessoren müssen nur dann dynamisch geladen werden, wenn die Ressource ausgelöst wird, und Polyfills müssen bedingt sein und nur von Browsern heruntergeladen werden, die sie tatsächlich benötigen.

Profilerstellung und Debugging

Optimieren ohne Messen ist reine Vermutung. Mit dem Profiler von React können Sie aufzeichnen, wie lange das Rendern jeder Komponente dauert und in welcher Phase (Montage oder Update), wodurch echte Engpässe sichtbar werden. Eine nützliche Heuristik besteht darin, Renderings, die das Ein-Frame-Budget (ca. 16 ms bei 60 fps) überschreiten, als verdächtig zu behandeln und zur Überwachung zu senden, sodass Leistungseinbußen in der Produktion auftreten, bevor sich der Benutzer beschwert.

Netzwerkoptimierung

Die Netzwerkschicht bietet oft unterschätzte Vorteile. Ressourcenhinweise weisen den Browser an, Arbeiten vorherzusehen: DNS für externe Domänen im Voraus aufzulösen, Vorabverbindungen zu Schriftartservern oder APIs einzurichten, Ressourcen mit niedriger Priorität vorab abzurufen, die später benötigt werden, und kritische Ressourcen wie wichtiges CSS oder das Hauptbild vorab zu laden.

Im Hinblick auf die Anforderungseffizienz kombiniert Batching mehrere einzelne Aufrufe zu einer einzigen Anforderung und reduziert so den Roundtrip-Overhead, was besonders nützlich ist, wenn viele Komponenten fast gleichzeitig ähnliche Daten anfordern. Und Caching-Strategien schließen den Kreis: Ein Servicemitarbeiter kann Antworten aus dem Cache bereitstellen und im Hintergrund aktualisieren, während Datenverwaltungsbibliotheken steuern, wie lange eine Antwort als frisch gilt, bevor ein neuer Abruf erforderlich ist, wodurch redundante Anforderungen vermieden werden.

Fazit

Web-Performance ist ein kontinuierlicher vierstufiger Prozess: Messung (Web Vitals, Profiling, Überwachung realer Benutzer), Optimierung (Code-Aufteilung, Speicherung, Lazy Loading), Validierung (A/B-Tests, Feldüberwachung) und Iteration (Leistungsbudgets und automatisierte Prüfungen).

Es lohnt sich, ein Leistungsbudget zu formalisieren, explizite Grenzen für das Gewicht von Skripten, Stylesheets, Bildern und der Gesamtseite festzulegen und es als Vertrag zu behandeln, den das Team nicht ohne bewusste Entscheidung überschreitet. Implementieren Sie Techniken schrittweise und messen Sie dabei stets die tatsächliche Auswirkung auf die für Ihre Benutzer wichtigen Kennzahlen und nicht auf isolierte Laborzahlen.


Wie überwachen und optimieren Sie die Leistung Ihrer Anwendungen? Teilen Sie Ihre Techniken!

Lesen Sie auch