PRPL ist ein Akronym, das ein Muster beschreibt, mit dem Webseiten schneller geladen und interaktiv werden:
- Laden Sie die später gefundenen Ressourcen vorab.
- Rendern Sie die ursprüngliche Route so schnell wie möglich.
- Lade die verbleibenden Assets vorab in den Cache.
- Lazy load andere Routes und nicht kritische Assets.
In diesem Leitfaden erfahren Sie, wie diese Techniken zusammenpassen, aber dennoch unabhängig voneinander verwendet werden können, um Leistungsergebnisse zu erzielen.
Seite mit Lighthouse prüfen
Führen Sie Lighthouse aus, um Verbesserungsmöglichkeiten im Einklang mit den PRPL-Methoden zu identifizieren:
- Drücken Sie Strg + Umschalttaste + J (oder Befehlstaste + Optionstaste + J auf einem Mac), um die Entwicklertools zu öffnen.
- Klicken Sie auf den Tab Lighthouse.
- Klicken Sie die Kästchen Leistung und Progressive Web-App an.
- Klicken Sie auf Analysen ausführen, um einen Bericht zu erstellen.
Wichtige Ressourcen vorab laden
Lighthouse zeigt die folgende fehlgeschlagene Prüfung an, wenn eine bestimmte Ressource verspätet geparst und abgerufen wird:
Preload ist eine deklarative Abrufanfrage, die den Browser auffordert, eine Ressource anzufordern, die sonst vom Preload-Scanner des Browsers nicht gefunden werden kann, z. B. ein Bild, auf das in der background-image
-Property verwiesen wird. Sie können spät erkannte Ressourcen vorab laden, indem Sie dem Head Ihres HTML-Dokuments ein <link>
-Tag mit rel="preload"
hinzufügen:
<link rel="preload" as="image" href="hero-image.jpg">
Wenn Sie eine <link rel="preload">
-Anweisung hinzufügen, wird eine Anfrage für diese Ressource initiiert und im Cache gespeichert. Der Browser kann sie dann bei Bedarf abrufen.
Weitere Informationen zum Vorladen wichtiger Ressourcen finden Sie im Leitfaden Wichtige Assets vorab laden.
Erste Route so schnell wie möglich rendern
Lighthouse gibt eine Warnung aus, wenn es Ressourcen gibt, die den First Paint verzögern, also den Moment, in dem Ihre Website Pixel auf dem Bildschirm darstellt:
Um den First Paint zu verbessern, empfiehlt Lighthouse, kritisches JavaScript einzubetten und den Rest mit async
zu verschieben. Außerdem sollte kritisches CSS, das im sichtbaren Bereich verwendet wird, inline eingefügt werden. Dadurch wird die Leistung verbessert, da keine zusätzlichen Zugriffe auf den Server erforderlich sind, um renderblockierende Assets abzurufen.
Inline-Code ist jedoch aus Entwicklungssicht schwieriger zu pflegen und kann nicht separat vom Browser im Cache gespeichert werden.
Eine weitere Möglichkeit, den First Paint zu verbessern, besteht darin, das ursprüngliche HTML Ihrer Seite serverseitig zu rendern. So werden dem Nutzer Inhalte sofort angezeigt, während Scripts noch abgerufen, geparst und ausgeführt werden. Dies kann jedoch die Nutzlast der HTML-Datei erheblich erhöhen, was sich negativ auf die Time to Interactive auswirken kann, also die Zeit, die vergeht, bis Ihre Anwendung interaktiv wird und auf Nutzereingaben reagieren kann.
Es gibt keine einzige richtige Lösung, um die First Paint-Zeit in Ihrer Anwendung zu reduzieren. Sie sollten das Einbetten von Stilen und das serverseitige Rendering nur in Betracht ziehen, wenn die Vorteile die Nachteile für Ihre Anwendung überwiegen. In den folgenden Ressourcen finden Sie weitere Informationen zu diesen beiden Konzepten.
Assets vorab im Cache speichern
Da Dienstworker als Proxy fungieren, können sie bei wiederholten Besuchen Assets direkt aus dem Cache statt vom Server abrufen. So können Nutzer Ihre App nicht nur offline verwenden, sondern auch bei wiederholten Besuchen schneller auf Seiten zugreifen.
Verwenden Sie eine Bibliothek eines Drittanbieters, um das Generieren eines Dienstarbeiters zu vereinfachen, es sei denn, Sie haben komplexere Caching-Anforderungen als eine Bibliothek bieten kann. Workbox bietet beispielsweise eine Reihe von Tools, mit denen Sie einen Service Worker zum Caching von Assets erstellen und verwalten können. Weitere Informationen zu Dienstmitarbeitern und Offlinezuverlässigkeit finden Sie im Leitfaden zu Dienstmitarbeitern im Lernpfad zur Zuverlässigkeit.
Lazy Loading
Lighthouse zeigt eine fehlgeschlagene Prüfung an, wenn Sie zu viele Daten über das Netzwerk senden.
Dies schließt alle Asset-Typen ein. Große JavaScript-Nutzlasten sind jedoch besonders kostspielig, da der Browser zum Parsen und Kompilieren sie benötigt. In diesem Fall gibt Lighthouse gegebenenfalls auch eine Warnung aus.
Wenn Sie eine kleinere JavaScript-Nutzlast senden möchten, die nur den Code enthält, der beim ersten Laden Ihrer Anwendung benötigt wird, teilen Sie das gesamte Bundle und laden Sie die einzelnen Teile bei Bedarf.
Nachdem Sie Ihr Bundle aufgeteilt haben, laden Sie die wichtigeren Chunks vorab (siehe Anleitung unter Wichtige Assets vorab laden). Durch das Vorabladen werden wichtigere Ressourcen früher vom Browser abgerufen und heruntergeladen.
Neben dem Aufteilen und Laden verschiedener JavaScript-Chunks auf Anfrage bietet Lighthouse auch eine Prüfung für das Lazy-Loading nicht kritischer Bilder.
Wenn Sie viele Bilder auf Ihrer Webseite laden, sollten Sie beim Laden einer Seite alle Bilder, die sich „below the fold“ oder außerhalb des Darstellungsbereichs des Geräts befinden, aufschieben. Weitere Informationen finden Sie unter Lazysize für Lazy Loading von Bildern verwenden.
Nächste Schritte
Nachdem Sie nun einige der grundlegenden Konzepte hinter dem PRPL-Muster kennen, fahren Sie mit dem nächsten Leitfaden in diesem Abschnitt fort, um mehr zu erfahren. Nicht alle Techniken müssen zusammen angewendet werden. Jede dieser Maßnahmen führt zu deutlichen Leistungsverbesserungen.
- Kritische Ressourcen vorab laden.
- Rendern Sie die ursprüngliche Route so schnell wie möglich.
- Lade die verbleibenden Assets vorab in den Cache.
- Lazy Loading für andere Routen und nicht kritische Assets