Jetzt abonnieren, um Benachrichtigungen über neue Beiträge zu erhalten:

Cloudflare Pages wird noch schneller – mit Early Hints

2022-10-07

Lesezeit: 4 Min.
Dieser Beitrag ist auch auf English, 繁體中文, Français, Español, und 简体中文 verfügbar.

Letztes Jahr haben wir gezeigt, was wir mit „blitzschnell“ meinen, indem wir die erstklassige Performance von Pages in allen Teilen der Welt bewiesen haben. Heute freuen wir uns, eine Integration ankündigen zu können, die noch mehr Geschwindigkeit bringen wird – ab sofort unterstützt Pages nämlich Early Hints! Mit Early Hints können Sie kritische Seitenressourcen sofort laden, noch früher als HTML-Seiten, die oft nur langsam geladen werden. Early Hints können verwendet werden, um das Ladeerlebnis für Ihre Besucher zu verbessern, indem sie wichtige Performance-Kennzahlen wie den LCP (largest contentful paint) deutlich reduzieren.

Cloudflare Pages gets even faster with Early Hints

Was ist Early Hints?

Early Hints ist eine neue Funktion des Internets, die in Chrome seit Version 103 unterstützt wird und die Cloudflare für Websites, die unser Netzwerk nutzen, allgemein verfügbar gemacht hat. Early Hints ersetzt Server Push als Mechanismus, um einem Browser „Hinweise“ auf kritische Ressourcen auf Ihrer Seite zu geben (z. B. Schriftarten, CSS und Above-the-fold-Bilder). Der Browser kann sofort mit dem Laden dieser Ressourcen beginnen, bevor er auf eine vollständige HTML-Antwort wartet. Dadurch wird Zeit genutzt, die sonst vergeudet worden wäre! Vor Early Hints konnte keine Arbeit begonnen werden, bis der Browser das erste Byte der Antwort erhalten hatte. Jetzt kann der Browser diese Zeit sinnvoll nutzen, während er vorher gewartet hat. Early Hints können die Performance Ihrer Website erheblich verbessern, insbesondere bei Messgrößen wie LCP.

Wie Early Hints funktioniert

Cloudflare zwischenspeichert alle Link-Header der Typen preload und preconnect, die von Ihrer 200 OK-Antwort gesendet werden, und sendet sie frühzeitig für alle nachfolgenden Anfragen als 103 Early Hints-Antwort.

In der Praxis sieht eine HTTP-Konversation nun folgendermaßen aus:

Anfrage

Antwort von Early Hints

GET /
Host: example.com

Antwort

103 Early Hints
Link: </styles.css>; rel=preload; as=style

Early Hints auf Cloudflare Pages

200 OK
Content-Type: text/html; charset=utf-8
Link: </styles.css>; rel=preload; as=style

<html>
<!-- ... -->
</html>

Websites, die auf Cloudflare Pages gehostet werden, können besonders von Early Hints profitieren. Wenn Sie Pages Functions verwenden, um dynamische, serverseitig gerenderte (SSR) Seiten zu generieren, besteht eine gute Chance, dass Early Hints Ihre Website deutlich verbessern werden.

Performance-Tests

Wir haben eine einfache E-Commerce-Demo-Website erstellt, um die Performance von Early Hints zu evaluieren.

Diese Landing Page zeigt die Preise der einzelnen Artikel sowie einen Zähler für den Restbestand an. Die Seite selbst besteht nur aus handgeschriebenem HTML und CSS, aber diese Preis- und Bestandswerte werden für jede Anfrage mit Pages Functions in Live-Templates umgesetzt. Um das Laden von einer externen Datenquelle zu simulieren (möglicherweise unterstützt von KV, Durable Objects, D1, oder sogar einer externen API wie Shopify) haben wir eine feste Zeitverzögerung hinzugefügt, bevor diese Daten aufgelöst werden. Wir fügen preload- in unserer Antwort auf einige kritische Ressourcen ein:

A screenshot of the landing page of a demo Cloudflare e-commerce website selling a t-shirt, cap and keycap. Each item is branded with the Cloudflare logo, and has a price and
  • ein externes CSS-Stylesheet,

  • das Bild des T-Shirts,

  • das Bild der Mütze,

  • und das Bild der Tastenkappe.

Die allererste Anfrage erzeugt einen Wasserfall, wie man es erwarten könnte. Die erste Anfrage wird für eine beträchtliche Zeit blockiert, während wir diese Preis- und Lagerbestandsdaten klären. Nach dem Laden analysiert der Browser den HTML-Code, holt die externen Ressourcen heraus und ruft deren Inhalte ab. Die CSS und die Bilder verlängern die Ladezeit erheblich, da sie sehr groß sind und eine hohe Qualität aufweisen. Das größte inhaltsreiche Bild (LCP) tritt auf, wenn das Bild des T-Shirts geladen wird, und das Dokument wird beendet, sobald alle Anfragen erfüllt sind.

Nachfolgende Anfragen sind wirklich interessant! Diese preload-Links werden im globalen Netzwerk von Cloudflare zwischengespeichert und vor dem Dokument in einer 103 Early Hints-Antwort gesendet. Die anfängliche Anfrage erfolgt auf die gleiche Weise, aber jetzt rutschen die Anfragen für CSS und Bilder viel weiter nach links, da sie gestartet werden können, sobald die 103-Antwort zugestellt wird. Der Browser beginnt mit dem Abrufen dieser Ressourcen, während er darauf wartet, dass die ursprüngliche Anforderung das serverseitige Rendering beendet. Der LCP tritt wieder auf, sobald das Bild des T-Shirts geladen ist, aber diesmal wird er um 530 ms vorgezogen, weil das Laden 752 ms schneller begonnen hat, und das Dokument wird 562 ms schneller vollständig geladen, wiederum weil die externen Ressourcen alle schneller geladen werden konnten.

A network diagnostics waterfall for the page without Early Hints, as described above.

Die letzten vier Anfragen (gelb hervorgehoben) werden 304 Not Modified-Antworten mit einem If-None-Match-Header ausgegeben. Standardmäßig verlangt Cloudflare Pages, dass der Browser bestätigt, dass alle Assets frisch sind. Falls sie also zwischen der Early Hints-Antwort und dem Zeitpunkt ihrer Verwendung aktualisiert wurden, prüft der Browser, ob sie sich geändert haben. Da dies nicht der Fall ist, muss kein Body mit Inhalten heruntergeladen werden, und die Antwort wird schnell abgeschlossen. Dies kann vermieden werden, indem ein benutzerdefinierter Cache-Control-Header für diese Assets mit einer _headers-Datei gesetzt wird. Sie könnten diese Bilder beispielsweise mit einer Regel wie dieser eine Minute lang zwischenspeichern:

A network diagnostics waterfall with Early Hints, as described above.

Wir könnten diese Performance-Prüfung weiterführen, indem wir andere Funktionen untersuchen, die Cloudflare anbietet, wie automatische CSS-Minifikation, Cloudflare Images, und Image Resizing (Größenänderung von Bildern).

# _headers

/*.png
  Cache-Control: max-age=60

Wir stellen Cloudflare Pages bereits über eines der schnellsten Netzwerke der Welt bereit — Early Hints ermöglicht es Entwicklern einfach, unser globales Netzwerk noch besser zu nutzen.

Verwendung von Early Hints und Cloudflare Pages

Die Early Hints-Funktion von Cloudflare ist derzeit auf das Caching von Link-Headern in der Antwort einer Webseite beschränkt. Normalerweise würde dies bedeuten, dass Nutzer von Cloudflare Pages entweder die _headers-Datei oder Pages-Funktionen verwenden müssten, um diese Header anzuwenden. Um Ihnen die Arbeit zu erleichtern, unterstützen wir jedoch nun auch die Umwandlung aller <link> HTML-Elemente, die Sie in Ihren Body einfügen, in Link-Header. So können Sie die von Ihnen gesendeten Early Hints direkt aus demselben Dokument steuern, in dem Sie auf diese Ressourcen verweisen – Sie müssen also nicht aus HTML herauskommen, um die Vorteile der Early Hints zu nutzen.

Zum Beispiel wird für das folgende HTML-Dokument eine Early-Hints-Antwort erzeugt:

HTML-Dokument

Antwort von Early Hints

<!DOCTYPE html>
<html>
  <head>
    <link rel="preload" as="style" href="/styles.css" />
  </head>
  <body>
    <!-- ... -->
  </body>
</html>

Wie bereits erwähnt, können Link-Header auch mit einer _headers-Datei gesetzt werden, wenn Sie dies bevorzugen:

103 Early Hints
Link: </styles.css>; rel=preload; as=style

Early Hints (und das automatische HTML-<link>-Parsing) wurde bereits automatisch für alle pages.dev-Domains aktiviert. Wenn Sie benutzerdefinierte Domains in Ihrem Pages-Projekt konfiguriert haben, stellen Sie sicher, dass Sie Early Hints für diese Domains im Cloudflare-Dashboard unter dem Reiter „Geschwindigkeit“ aktivieren. Weitere Informationen finden Sie in unserer Dokumentation.

# _headers

/
  Link: </styles.css>; rel=preload; as=style

Zusätzlich hoffen wir, in Zukunft die Smart Early Hints-Features zu unterstützen. Smart Early Hints wird Cloudflare in die Lage versetzen, automatisch Early Hints zu generieren, auch wenn keine Link-Header oder <link>-Elemente vorhanden sind, indem der Traffic der Website analysiert wird und daraus geschlossen wird, welche Ressourcen für eine bestimmte Seite wichtig sind. Wir werden bald mehr über Smart Early Hints berichten.

In der Zwischenzeit können Sie Early Hints auf Pages noch heute ausprobieren! Lassen Sie uns wissen, inwieweit Sie eine Verbesserung des Ladevorgangs auf unserem Discord-Server feststellen.

Auf Cloudflare TV ansehen

Wir schützen komplette Firmennetzwerke, helfen Kunden dabei, Internetanwendungen effizient zu erstellen, jede Website oder Internetanwendung zu beschleunigen, DDoS-Angriffe abzuwehren, Hacker in Schach zu halten, und unterstützen Sie bei Ihrer Umstellung auf Zero Trust.

Greifen Sie von einem beliebigen Gerät auf 1.1.1.1 zu und nutzen Sie unsere kostenlose App, die Ihr Internet schneller und sicherer macht.

Wenn Sie mehr über unsere Mission, das Internet besser zu machen, erfahren möchten, beginnen Sie hier. Sie möchten sich beruflich neu orientieren? Dann werfen Sie doch einen Blick auf unsere offenen Stellen.
Early Hints (DE)Cloudflare Pages (DE)Geschwindigkeit & ZuverlässigkeitProdukt-News

Folgen auf X

Greg Brimble|@GregBrimble
Cloudflare|@cloudflare

Verwandte Beiträge

24. Oktober 2024 um 13:00

Durable Objects aren't just durable, they're fast: a 10x speedup for Cloudflare Queues

Learn how we built Cloudflare Queues using our own Developer Platform and how it evolved to a geographically-distributed, horizontally-scalable architecture built on Durable Objects. Our new architecture supports over 10x more throughput and over 3x lower latency compared to the previous version....

09. Oktober 2024 um 13:00

Improving platform resilience at Cloudflare through automation

We realized that we need a way to automatically heal our platform from an operations perspective, and designed and built a workflow orchestration platform to provide these self-healing capabilities across our global network. We explore how this has helped us to reduce the impact on our customers due to operational issues, and the rich variety of similar problems it has empowered us to solve....