Preload, Preconnect, Prefetch: Verbessern Sie die Leistung Ihrer Website mit Ressourcenhinweisen

Veröffentlicht: 2022-05-04

Moderne Webbrowser verwenden alle möglichen Techniken, um die Gesamtleistung Ihrer Website zu verbessern – von der Priorisierung der wichtigsten Ressourcen und deren Abruf zuerst bis hin zum Erraten, welche Seite der Benutzer als nächstes besuchen wird.

Sie sollten sich jedoch nicht darauf verlassen, dass Browser, so fortschrittlich sie auch sein mögen, alle Entscheidungen über die Leistung Ihrer Website treffen.

Als Websitebesitzer sind Sie derjenige, der weiß, welche Ressourcen am wichtigsten sind und wie die tatsächliche Benutzerreise auf Ihrer Website aussieht. Und um die Gesamtleistung, wahrgenommene Geschwindigkeit und Benutzererfahrung Ihrer Website zu verbessern, könnten Sie dieses Wissen nutzen, um den Browsern zu helfen, Ihre Seiten schneller zu laden.

Hier kommen die Ressourcenhinweise ins Spiel.

In den folgenden Zeilen schauen wir uns diese an und wie man ihre Vorteile optimal nutzt.

Tauchen wir ein.


Funktionsweise von Browsern (in Kürze)


Um die Ressourcenhinweise besser zu verstehen und wo sie anwendbar sind, werfen wir einen kurzen Blick darauf, wie Browser Inhalte tatsächlich laden.

Haftungsausschluss: Die folgenden Zeilen sind eine zu starke Vereinfachung der Funktionsweise von Browsern. Wenn Sie tiefer in den Prozess eintauchen möchten, sollten Sie diesen Artikel lesen - Seite füllen: Funktionsweise von Browsern.


Wir könnten den gesamten Prozess des Ladens einer Seite durch einen Browser in drei Schritte unterteilen:

  • Stelle Verbindung her;
  • Herunterladen, Analysieren und Rendern des Codes;
  • Die Seite interaktiv gestalten;

In der ersten Phase muss der Browser eine Verbindung mit dem Server herstellen, um die Ressourcen herunterzuladen. Dazu gehört das Nachschlagen des Domänennamens und das Auflösen in eine IP-Adresse, das Einrichten einer Verbindung zum Server und das Verschlüsseln der Verbindung aus Sicherheitsgründen.

Sobald alles erledigt ist, kann der Browser mit dem Herunterladen und Analysieren der Informationen fortfahren, das Document Object Model (DOM) und das CSS Object Model (CSSOM) erstellen und dann den Inhalt rendern.

Der letzte Teil besteht darin, die Seite interaktiv zu machen. Alle oben genannten Prozesse finden im Hauptthread statt. Nachdem also der Hauptthread des Browsers mit dem Parsen, Rendern und Zeichnen der Seite abgeschlossen ist, ist es an der Zeit, sich um zurückgestellte JavaScript-Dateien zu kümmern, um die Seite für Scrollen, Berühren und andere Interaktionen verfügbar zu machen.

Kurz gesagt, das ist der Prozess hinter den Kulissen jedes Mal, wenn eine Seite geladen wird.

Sehen wir uns an, wie Sie jede dieser Phasen positiv beeinflussen können, indem Sie die Ressourcenhinweise integrieren.


Ressourcenhinweise: Prefetch, Preconnect, Preload

Wie der Name schon sagt, sind Ressourcenhinweise Hinweise oder Anweisungen, die dem Browser mitteilen, wie er mit bestimmten Ressourcen oder Webseiten umgehen soll. Mit anderen Worten, mit diesen Anweisungen können Sie den Browser bei der Priorisierung von Ursprüngen oder Ressourcen unterstützen, die abgerufen und gerendert werden müssen.

Alle Ressourcenhinweise verwenden das rel -Attribut des link -Elements, das Sie im Kopf Ihrer HTML-Dokumente finden.

Durch die Integration dieser HTML-Code-Snippets auf Ihrer Website kann der Browser früher mit dem Laden der ausgewählten Dateien beginnen, als wenn der Browser sie beim normalen Laden der Seite findet.

Und jetzt, da die Grundlagen hinter uns liegen, gehen wir zu dem Teil über, für den Sie hier sind – einen Überblick über die Ressourcenhinweise, ihre Vorteile und wann sie zu verwenden sind.

Vorauslesen

link rel=prefetch ist ein Ressourcenhinweis mit niedriger Priorität, der es dem Browser ermöglicht, Ressourcen abzurufen, die später benötigt werden, und sie im Cache des Browsers zu speichern.

Prefetch-Prozess

Da Prefetch eine sehr niedrige Priorität festlegt, verwenden Sie diesen Hinweis nicht für Dateien mit hoher Wichtigkeit .

Einer der großartigen Anwendungsfälle ist die Verwendung von Prefetch , um die Ladezeit nachfolgender Seiten zu verbessern. Beispielsweise können Sie die Prefetch- Direktive während der Authentifizierung eines Benutzers anwenden. Auf diese Weise können Sie die Zeit nutzen, die sie benötigen, um ihre Anmeldeinformationen einzugeben, um die Ressourcen vorab zu laden, die für die Seite erforderlich sind, die sie als Nächstes sehen werden.

Indem Sie die Schritte Ihrer Besucher auf Ihrer Website antizipieren und die Ressourcen vorab abrufen, können Sie Metriken wie First Contentful Paint und Time to Interactive verbessern. Etwas, das Netflix getan hat und seine Time to Interactive um 30 % reduziert hat.

Alles, was wir bis zu diesem Punkt erwähnt haben, bezieht sich auf das Prefetching, auch bekannt als Link-Prefetching. Aber es gibt zwei andere Arten von Prefetching, die ebenso wichtig sind, und wir müssen erwähnen:

1. DNS-Vorabruf
Der Browser muss eine DNS-Suche durchführen, um einen Hostnamen (die URL) in eine IP-Adresse umzuwandeln, bevor er eine Verbindung zum Host (Ursprungsserver) herstellt.

Obwohl dies normalerweise nur Millisekunden dauert, muss der Browser, wenn eine Website Dateien von einem Domänennamen eines Drittanbieters lädt, was die meisten Websites tun, eine DNS-Suche für jede Domäne durchführen. Einige Sites (z. B. Nachrichten-Websites) verwenden viele externe Ressourcen, was bedeutet, dass pro Seite möglicherweise Dutzende von DNS-Lookups erforderlich sind.

In diesen Fällen kann die Verwendung des dns-prefetch- Hinweises einige Millisekunden einsparen, da die Anweisung den Browser anweist, diesen Prozess sofort zu starten, anstatt erst später im Ladeprozess die Notwendigkeit zu erkennen.

DNS-Prefetch


Wie im Web Almanac 2021 vorgeschlagen, besteht eine bewährte Vorgehensweise darin, dns-prefetch mit dem preconnect -Hinweis zu kombinieren, um optimale Ergebnisse zu erzielen. Sie können den Grund in dem Abschnitt sehen, in dem wir über Preconnect sprechen.

2. Vorrendern
Prerendering ist dem Prefetching insofern sehr ähnlich, als es Ressourcen optimiert, zu denen der Benutzer als nächstes navigieren kann. Der Unterschied besteht darin, dass Prerender tatsächlich die gesamte Seite anstelle bestimmter Ressourcen rendert .

vorrendern


Vorverbinden

Wie dns-prefetch hilft die Anweisung preconnect dem Browser, frühzeitig Verbindungen herzustellen, bevor eine erste Anfrage an den Server gesendet wird.

Der Preconnect- Hinweis geht jedoch noch einen Schritt weiter. Während es DNS-Lookups durchführt, umfasst es auch TLS-Verhandlungen und TCP-Handshakes. Dies wiederum eliminiert die Roundtrip-Latenz und spart noch mehr Zeit.

Mit und ohne Preconnect

Aber hier kommt die Frage:

Wenn preconnect alles tut, was dns-prefetch tut, und darüber hinaus, warum sollte ich dann dns-prefetch überhaupt verwenden?

In den meisten Fällen ist Preconnect die bevorzugte Option gegenüber dns-prefetch , aber das Problem ist, dass Preconnect von einigen Browsern nicht unterstützt wird:

Unterstützung für Browser vorab verbinden
Quelle: caniuse.com

Das Gute ist, dass Sie sie zusammen verwenden können, um das Beste aus ihnen herauszuholen. Sie können von Preconnect in Browsern profitieren, die dies mit einem Fallback auf dns-prefetch unterstützen:

Preconnect und DNS-Prefetch

Laut Google:

„Sie können die Ladezeit um 100 bis 500 ms beschleunigen, indem Sie frühzeitig Verbindungen zu wichtigen Drittanbieter-Ursprüngen herstellen. Diese Zahlen mögen klein erscheinen, aber sie machen einen Unterschied darin, wie Benutzer die Leistung von Webseiten wahrnehmen.“

Bereits im Jahr 2019 gelang es Chrome, seine Time To Interactive um fast 1 Sekunde zu verbessern, indem es sich mit wichtigen Ursprüngen vorab verbunden hat.


Vorladen

Bevor wir erklären, wie die Preload- Direktive funktioniert, müssen wir etwas klarstellen.

Obwohl das Vorladen regelmäßig als „Ressourcenhinweis“ erwähnt wird, ist dies nicht der Fall. Preload ist ein deklarativer Abruf und für die Browser obligatorisch , wodurch es eher ein Befehl als ein Hinweis ist.

Das Vorladen wird jedoch verwendet, um den Browser zu zwingen, eine Ressource früher herunterzuladen, als der Browser sie entdecken würde, da dies für die Seite von entscheidender Bedeutung ist.

Die Preload- Direktive funktioniert am besten bei Ressourcen, die Teil des kritischen Renderpfads sind, aber vom Browser nicht leicht erkannt werden. Zum Beispiel Schriftarten, CSS oder kritisches JavaScript.

Ein weiterer Unterschied zu den dns-prefetch- und preconnect -Hinweisen besteht darin, dass sie zwar nur die rel- und href -Attribute benötigen, das Vorabladen jedoch komplizierter ist. Sie müssen das as -Attribut hinzufügen, das den Inhaltstyp der Ressource angibt, die Sie vorab laden möchten.

vorladen

Laut Addy Osmani, Engineering Manager bei Google, ist die Bereitstellung eines as -Attributs beim Vorladen obligatorisch:

„Wenn Sie kein gültiges „as“ angeben, wenn Sie angeben, was vorab geladen werden soll, z. B. Skripts, werden Sie am Ende zweimal abgerufen.“


Hier ist eine vollständige Liste der as -Werte, die Sie angeben können:

als Werte
Das Einschließen des as -Attributs hilft dem Browser, die Priorität der vorab abgerufenen Ressource gemäß ihrem Typ festzulegen und festzustellen, ob die Ressource bereits im Cache vorhanden ist.

Sehen Sie sich das Dokument Prioritäten und Planung von Chrome-Ressourcen an, um mehr darüber zu erfahren, wie die verschiedenen Ressourcentypen priorisiert werden.

Bei einigen Ressourcen, wie z. B. Schriftarten, müssen Sie auch das crossorigin- Attribut einschließen.

Crossorigin-Attribut

Das crossorigin- Attribut legt den Modus der Anfrage auf eine HTTP-CORS-Anfrage fest. CORS (Cross-Origin Resource Sharing) ist ein Mechanismus, der es einem Server ermöglicht, andere Ursprünge als seinen eigenen anzugeben, von denen ein Browser das Laden von Ressourcen zulassen sollte. Wir werden nicht näher darauf eingehen, da dies nicht der Schwerpunkt dieses Artikels ist, aber Sie können hier weitere Informationen finden.

Und ähnlich wie beim as -Attribut wird das Vorladen von Schriftarten ohne Crossorigin doppelt abgerufen. Hier noch ein Auszug aus dem Artikel von Addy Osmani zum Thema:

„Stellen Sie sicher, dass Sie ein Crossorigin-Attribut hinzufügen, wenn Sie Schriftarten mit Preload abrufen, andernfalls werden sie doppelt heruntergeladen. Sie werden mithilfe von CORS im anonymen Modus angefordert. Dieser Ratschlag gilt auch dann, wenn Schriftarten denselben Ursprung wie die Seite haben. Dies gilt auch für andere anonyme Abrufe (z. B. standardmäßig XHR).“


Mehr Ressourcenhinweise, mehr Probleme

Wenn Sie alles bisher gelesen haben, könnten Sie denken, dass die Verwendung so vieler Ressourcenhinweise wie möglich nur dazu führen würde, dass die Browser Ihre Seiten blitzschnell laden.

Leider ist dies nicht der Fall.

Hier sind einige der Rückschläge, die Sie bei der Integration der Ressourcenhinweise berücksichtigen sollten:

1. Prefetch kann den Datenverbrauch erhöhen

Obwohl Prefetch eine niedrige Download-Priorität festlegt, bedeutet das nicht, dass es harmlos ist. Seine Verwendung kann den Datenverbrauch auf Ihrer Website erhöhen, was sowohl für Sie (erhöhter Datenverkehr auf Ihrem Server) als auch für Ihre Benutzer (unnötiger übermäßiger Ressourcenverbrauch) zu Problemen führen kann. Außerdem können Sie am Ende zusätzliche Bytes laden, die möglicherweise nicht verwendet werden. Denken Sie also zweimal nach, bevor Sie es integrieren.

2. Prerender kann Bandbreitenverschwendung verursachen

Das Glücksspiel mit Prerender ist sogar noch größer als mit Prefetch , da Sie ganze Seiten im Voraus herunterladen. Dies macht den Hinweis ressourcenintensiv und kann zu Bandbreitenverschwendung führen, insbesondere auf Mobilgeräten. Und das Schlimmste daran ist, dass Benutzer möglicherweise nicht einmal die Auswirkung des Hinweises sehen, wenn sie die Seite nicht anfordern.

3. Preconnect kann zu zusätzlicher CPU-Auslastung führen

Obwohl Preconnect ein Hinweis mit niedriger Priorität ist, kann es dennoch die Leistung Ihrer Website beeinträchtigen. Wenn eine hergestellte Verbindung nicht schnell verwendet wird (innerhalb von 10 Sekunden bei Chrome), fügt die Preconnect- Anweisung nur zusätzliche CPU-Auslastung hinzu und sie wird automatisch vom Browser geschlossen. Darüber hinaus sollten Sie die Vorverbindung sparsam verwenden, da die Größe der Verschlüsselungszertifikate etwa 3 KB beträgt, was mit der Bandbreite um andere wichtige Ressourcen konkurrieren würde.


4. Preload überschreibt die vom Analysetool des Browsers festgelegten Prioritäten

preload ist eine leistungsstarke Anweisung, da Sie damit den Browser veranlassen können, eine Ressource sofort herunterzuladen. Moderne Webbrowser sind jedoch ziemlich gut darin, Ressourcen zu priorisieren, sodass die übermäßige Verwendung von Preload zu negativen Ergebnissen führen kann. Wenn Sie beispielsweise eine Preload -Direktive hinzufügen, die mit einer asynchronen Ressourcen-URL übereinstimmt, ruft der Browser sie schneller ab, sodass er sie schneller parst, wodurch die Wirkung Ihres async-Attributs aufgehoben wird, indem der Haupt-Thread sehr früh beim Laden der Seite unterbrochen wird.

Rekapitulieren

Wir haben in diesem Artikel viel behandelt, also fassen wir die wichtigsten Punkte kurz zusammen:

  • dns-prefetch und preconnect werden verwendet, um Domänennamen zu priorisieren (z. B. https://example.com).
  • Prefetch und Preload werden verwendet, um das Laden von Ressourcen zu priorisieren. Während Prefetch zur Verbesserung der Ladezeit nachfolgender Seiten verwendet wird, funktioniert Preload am besten bei kritischen Ressourcen für die aktuelle Seite.
  • prerender verweist auf eine ganze Seite (z. B. blog.html).
  • prefetch , prerender und preconnect sind Ressourcenhinweise und werden so ausgeführt, wie der Browser es für richtig hält. Die Preload- Direktive ist ein Befehl, der für die Browser obligatorisch ist.
  • Vergessen Sie bei der Verwendung von preload nicht, die as - und crossorigin -Attribute anzugeben, um doppeltes Abrufen zu vermeiden.
  • Obwohl es sich bei den Ressourcenhinweisen um Anweisungen mit niedriger Priorität handelt, stellen sie dennoch eine Bedrohung für die Leistung Ihrer Website dar. Verwenden Sie sie in Maßen und nur bei Bedarf.
  • preload ist eine mächtige Anweisung, die die Prioritäten des Analyseprogramms des Browsers außer Kraft setzen kann. Vergessen Sie nicht, dass moderne Browser ziemlich gut darin sind, Ressourcen zu priorisieren, also gehen Sie sparsam mit dem Preload- „Hinweis“ um.

Nutzen Sie das neu erworbene Wissen über die Ressourcenhinweise, um die Bereitstellung von Inhalten und Assets zu beschleunigen und die Gesamtleistung Ihrer Website zu verbessern. Und vergessen Sie nicht, Ihre Website bei jeder Änderung in der realen Welt zu testen (Fokus auf Felddaten).