Verringern Sie Renderverzögerungen, indem Sie CSS und JavaScript vor der ersten sinnvollen Darstellung identifizieren und unnötige Arbeit aus diesem Pfad verschieben. Halten Sie wesentliche Stile verfügbar, wählen Sie passende Skriptmodi und laden Sie nicht pauschal alles vor. Das Ziel ist eine frühere korrekte Darstellung, nicht eine verschwundene Warnung bei ungestalteter oder defekter Seite.
Trennen Sie Rendering, Parsing und Hauptthread-Arbeit
Der Browser verarbeitet HTML zum DOM und Stile zu Darstellungsinformationen. Er verbindet relevante Struktur und Regeln, berechnet das Layout und zeichnet Pixel. Ein anwendbares Stylesheet kann Rendering aufhalten, weil seine Regeln das Aussehen bestimmen.
Klassische Skripte ohne async oder defer können HTML-Parsing während Download und Ausführung pausieren. Dieses Parserblocking unterscheidet sich von einer ausdrücklichen Renderblockierung, kann aber Entdeckung und Darstellung verzögern. Ein Skript kann zudem auf ein vorheriges Stylesheet warten, weil es Stile auslesen könnte. Entscheidend ist die Abhängigkeitskette, nicht allein die Dateiendung.
Auch asynchron geladene Skripte führen Arbeit auf dem Hauptthread aus, sofern sie nicht ausdrücklich verlagert wird. Lange Ausführung verzögert Rendering und Eingabeverarbeitung nach dem Download. Attribute ändern Zeitplanung, nicht Arbeitsmenge.
Bestimmen Sie das betroffene sichtbare Ereignis. Bei einem späten Bild trennen Sie Download von CSS oder JavaScript, das die Anzeige verhindert. Der LCP-Leitfaden unterscheidet diese Schritte. Ist die Seite früh sichtbar, aber nicht bedienbar, verwenden Sie die Analyse der JavaScript-Ausführungszeit.
Lesen Sie Abhängigkeiten in aktuellen Werkzeugen
„Renderblockierende Ressourcen beseitigen“ erscheint weiterhin in Suchanfragen und älteren Berichten. Lighthouse 13 verschob viele frühere Audits in Insights; neue Berichte können stattdessen einen Insight zu blockierenden Anfragen zeigen. Das Prinzip bleibt, alte Namen und JSON-Kennungen müssen jedoch nicht weiter existieren.
Zeichnen Sie eine Navigation im Performance-Panel auf und untersuchen Sie den Network-Wasserfall. Bestimmen Sie Dokument, Stylesheets, Skripte, Fonts und LCP-Ressource. Suchen Sie spät entdeckte Anfragen und deren Initiatoren. Eine kleine über @import gefundene Datei kann später beginnen als eine größere direkt im HTML verlinkte.
Bewahren Sie Screenshot oder Filmstreifen als Ausgangsreferenz auf. Ein früherer Paint mit kaputter Navigation oder ungestaltetem Inhalt ist nicht automatisch eine Verbesserung. Prüfen Sie auch weiter unten, denn im ersten Viewport unbenötigter Code kann dort erforderlich sein.
Addieren Sie Insight-Schätzungen nicht als unabhängige Messungen. Mehrere Hinweise können dieselbe Kette betreffen. Testen Sie eine zusammenhängende Änderung und kontrollieren Sie danach reale Anfragen und Darstellung.
Halten Sie kritisches CSS klein und wartbar
Kritisches CSS enthält Regeln für das erste sichtbare Layout. Ein sorgfältig ausgewählter Inline-Teil kann eine separate Anfrage vermeiden. Das gesamte Stylesheet einzubetten vergrößert dagegen jede HTML-Antwort und verhindert die Wiederverwendung als eigenständig gecachte Datei.
Der erste Viewport hängt von Gerät, Sprache, Einwilligung und Inhalt ab. Eine aus einem Desktopbild extrahierte Auswahl kann Mobilnavigation, lange übersetzte Titel oder Fehlerzustände übersehen. Behandeln Sie Extraktion als Buildprozess mit repräsentativen Vorlagen und visueller Kontrolle.
Dieses Beispiel bettet das wesentliche Layout ein und lädt eine Druckdatei über eine Medienbedingung.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Performance notes</title>
<style>
body { margin: 0; font-family: system-ui, sans-serif; line-height: 1.6; }
header, main { max-width: 70rem; margin-inline: auto; padding: 1rem; }
img { max-width: 100%; height: auto; }
</style>
<link rel="stylesheet" href="/styles/print.css" media="print">
</head>
<body>
<header>Performance notes</header>
<main><h1>A readable first render</h1><p>Essential content is available immediately.</p></main>
</body>
</html>Eine nicht passende Bedingung verhindert Renderblocking für das aktuelle Medium; der Browser kann die Datei dennoch laden. Setzen Sie ein Bildschirmstylesheet nicht dauerhaft auf media="print", da seine Regeln dann anders gelten. Nachträgliches Umschalten erfordert Schutz vor Skriptfehlern, CSP-Problemen und ungestaltetem Inhalt.
Inline-Stile müssen zur Content Security Policy passen, etwa durch den vorgesehenen Nonce oder Hash. Schwächen Sie eine bestehende Richtlinie nicht für ein Optimierungsbeispiel. Der Build muss kritische und vollständige Regeln synchron halten, damit veraltete Deklarationen keinen späteren Sprung auslösen.
Teilen Sie CSS nach tatsächlichem Seitenbedarf
Eine gemeinsame Basis mit routen- oder komponentenspezifischen Stilen verhindert, dass ein einfacher Artikel das gesamte Anwendungsdesign lädt. Halten Sie die Basis klein und laden Sie Komponentenstile bei Verwendung. Zu viele Kleinstdateien verursachen Planungs- und Pflegeaufwand; sinnvolle Funktionen sind bessere Grenzen.
Entfernen Sie unnötige @import-Ketten, wenn Sie den Build kontrollieren. Eine innerhalb einer anderen Datei entdeckte Datei schafft eine zusätzliche Abhängigkeit. Direkte HTML-Verweise oder Auflösung beim Build machen Entdeckung früher möglich. Das Problem ist die Anfragekette, nicht jede importierte Regel an sich.
Prüfen Sie CSS-in-JS zur Laufzeit. Manche Umsetzungen müssen erst JavaScript laden und ausführen, bevor sie Stile einfügen. Das verzögert Entdeckung und kann weitere Stilberechnung verursachen. Server- oder Buildextraktion kann helfen, hängt aber von Bibliothek, Framework und Version ab.
Kontrollieren Sie die ausgelieferte Antwort statt nur Komponentenquelltext. Ein Framework extrahiert CSS möglicherweise bereits, während eine andere Einstellung es zur Laufzeit einfügt. Prüfen Sie vorhandene Anfangsstile vor dem Austausch einer Bibliothek.
Wählen Sie async, defer und Module nach Abhängigkeit
Ein unabhängiges Skript verträgt andere Reihenfolgen; DOM- oder bibliotheksabhängiger Anwendungscode möglicherweise nicht. Pauschales async kann Wettlaufsituationen erzeugen.
Die üblichen Modi externer Skripte unterscheiden sich deutlich.
| Form | Laden | Ausführung und Reihenfolge |
|---|---|---|
| Klassisch ohne Attribute | Kann Parser pausieren | Vor Fortsetzung des Parsings |
Klassisch mit defer |
Parallel zum Parsing | Nach Parsing in Dokumentreihenfolge, vor DOMContentLoaded |
Klassisch mit async |
Parallel zum Parsing | Sobald bereit, ohne garantierte Dokumentreihenfolge |
type="module" ohne async |
Modulgraph parallel zum Parsing | Standardmäßig verzögert, mit Abhängigkeiten im Graph |
Erhalten Sie die Reihenfolge abhängiger klassischer Dateien mit defer.
<script src="/scripts/vendor.js" defer></script>
<script src="/scripts/navigation.js" defer></script>Deklarieren Sie für einen Moduleinstieg den Typ und drücken Sie Abhängigkeiten durch Imports aus.
<script type="module" src="/scripts/app.js"></script>Für ein tatsächlich unabhängiges Skript kann async passen.
<script src="/scripts/independent-widget.js" async></script>Dies sind Alternativen für verschiedene Ressourcen, nicht drei Implementierungen derselben Funktion. Bei einem gewöhnlichen klassischen Inline-Skript hat defer keine sinnvolle Wirkung. Module sind bereits standardmäßig verzögert; async verändert den Ausführungszeitpunkt ihres Graphs. Prüfen Sie die Dokumentation des script-Elements vor Änderungen an gemischten Altseiten.
Testen Sie anschließend Menüs, Suche, Validierung, Checkout und Einwilligung, soweit vorhanden. Kontrollieren Sie Konsolenfehler. Ein späteres klassisches Inline-Skript kann eine mit defer geladene Bibliothek zu früh ansprechen. Reparieren Sie die Abhängigkeit statt zufällig funktionierende Attributkombinationen zu suchen.
Nutzen Sie Preload und Preconnect gezielt
Preload kündigt eine für die aktuelle Seite nötige Ressource früher an. Er wendet kein CSS an, führt kein Skript aus und zeigt kein Bild. Der normale Verbraucher bleibt erforderlich, und die spätere Anfrage muss passen.
Hier wird ein Font vorgezogen, den das CSS unmittelbar benötigt.
<link rel="preload" href="/fonts/site-regular.woff2"
as="font" type="font/woff2" crossorigin>Verwenden Sie korrektes as und den passenden Anfragemodus. Falsche Hinweise können doppelte oder ungenutzte Downloads erzeugen. Laden Sie nicht alle Dateien vor: Unnötig priorisierte Ressourcen konkurrieren mit tatsächlich kritischen.
Preconnect betrifft Verbindungsaufbau, nicht Dateigröße oder Ausführung. Er kann bei einem wichtigen spät entdeckten fremden Ursprung helfen. Beschränken Sie ihn auf früh benötigte Ziele und den richtigen CORS-Modus. Eine für das Dokument bereits benutzte Verbindung desselben Ursprungs benötigt normalerweise keinen weiteren Hinweis für zusätzliche Dateien.
modulepreload hat besondere Semantik für Moduldownload und Vorbereitung. Nutzen Sie verfügbare Framework-Hinweise und prüfen Sie deren Ausgabe. Ersetzen Sie sie nicht mechanisch durch allgemeine Skript-Preloads ohne Kenntnis von Modulgraph und Anfragemodus.
Verwenden Sie Coverage als Protokoll statt Löschbefehl
Coverage zeigt verwendete und ungenutzte CSS- und JavaScript-Bereiche während der Aufzeichnung. Starten Sie mit Neuladen und bedienen Sie die Seite: Navigation, Dialoge, Scrollen, Tabs und responsive Ansichten mit anderen Komponenten.
„Ungenutzt“ bedeutet nur in dieser Aufzeichnung ungenutzt. Eine andere Route, spätere Interaktion, ein Fehlerzustand oder eine Sprache kann den Code benötigen. Mobile Regeln wirken bei reiner Desktopprüfung überflüssig. Löschen Sie nicht alle roten Bereiche eines einzelnen Laufs.
Ordnen Sie große ungenutzte Pakete ihren Modulen, Vorlagen oder Plugins zu. Entfernen Sie überholte Funktionen, laden Sie Abhängigkeiten nur auf benötigten Routen oder lassen Sie wirklich unerreichbaren Code im Build entfernen. Bearbeiten Sie keine generierten Pakete, die der nächste Build überschreibt.
Testen Sie erneut und notieren Sie geprüfte Interaktionen. Coverage gewinnt zusammen mit Abhängigkeitsgraph und visuellen oder funktionalen Prüfungen. Es beweist nicht, dass eine dynamische Anwendung eine Funktion in keinem Zustand benötigt.
Prüfen Sie CMS-Transformationen gemeinsam
Theme, Cache und Plugins können gleichzeitig Stile kombinieren, Skripte verzögern oder Hinweise umschreiben. Das gelieferte HTML unterscheidet sich dann stark von der Einstellungsoberfläche. Prüfen Sie Antwort und Initiatoren.
Aktivieren Sie nicht alle Verzögerungsoptionen gleichzeitig. Bewahren Sie einen verständlichen Ausgangszustand, ändern Sie eine Ebene und testen Sie wichtige Abläufe. Einige Skripte müssen vor Inline-Initialisierung laufen; Stile können ein Banner oder Mobilmenü unterstützen, das im einfachen Desktoptest fehlt.
Leeren Sie nach Vorlagenänderungen die zuständigen Caches und prüfen Sie frische sowie gespeicherte Antworten. Widersprüchliches Verhalten kann zwei Seitenversionen statt einen Schedulingfehler bedeuten. Halten Sie eine Rückkehr zur vorherigen Konfiguration bereit.
Bestätigen Sie eine frühere korrekte Darstellung
Wiederholen Sie dieselbe Navigation unter konstanten Bedingungen. Vergleichen Sie ersten nützlichen Inhalt, LCP, Layoutbewegung und Hauptthread-Arbeit. Prüfen Sie Gesamtseite und zentrale Interaktionen. Weniger blockierende Anfragen sind nur dann überzeugend, wenn Darstellung und Funktion stimmen.
Beziehen Sie einen schmalen Viewport, einen langen übersetzten Titel und leeren Cache ein. Verzögern Fonts weiterhin Text, nutzen Sie die Webfont-Optimierung. Dokumentieren Sie geänderte Abhängigkeiten in der Performance-Checkliste und folgen Sie den Ladezeit-Leitfäden zum nächsten belegten Engpass. Behalten Sie Änderungen, deren Nutzen sich wiederholen lässt.