Webschriftarten optimieren

In den vorherigen Modulen haben Sie gelernt, wie HTML, CSS, JavaScript und Medienressourcen optimiert werden. In diesem Modul lernen Sie Methoden zur Optimierung von Webschriftarten kennen.

Webschriftarten können die Seitenleistung sowohl beim Laden als auch beim Rendern beeinträchtigen. Das Herunterladen großer Schriftartdateien kann einige Zeit in Anspruch nehmen und sich negativ auf First Contentful Paint (FCP) auswirken. Ein falscher font-display-Wert kann hingegen zu unerwünschten Layoutverschiebungen führen, die zum Cumulative Layout Shift (CLS) einer Seite beitragen.

Bevor wir uns mit der Optimierung von Webschriftarten befassen, kann es hilfreich sein, zu wissen, wie diese vom Browser erkannt werden. So können Sie verstehen, wie CSS in bestimmten Situationen das Abrufen unnötiger Webschriftarten verhindert.

Discovery-Kampagnen

Die Webschriftarten einer Seite werden in einem Stylesheet mithilfe einer @font-face-Deklaration definiert:

@font-face {
  font-family: "Open Sans";
  src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2");
}

Das vorherige Code-Snippet definiert eine font-family mit dem Namen "Open Sans" und teilt dem Browser mit, wo die jeweilige Webfont-Ressource zu finden ist. Um Bandbreite zu sparen, lädt der Browser die Webschrift erst dann herunter, wenn festgestellt wurde, dass das Layout der aktuellen Seite sie benötigt.

h1 {
  font-family: "Open Sans";
}

Im vorherigen CSS-Snippet lädt der Browser die Schriftart "Open Sans" herunter, während ein <h1>-Element im HTML-Code der Seite geparst wird.

preload

Wenn Ihre @font-face-Deklarationen in einem externen Stylesheet definiert sind, kann der Browser erst mit dem Download beginnen, nachdem das Stylesheet heruntergeladen wurde. Dies führt dazu, dass Webschriftarten erst spät entdeckte Ressourcen entdecken. Es gibt jedoch Möglichkeiten, wie der Browser Webschriftarten schneller erkennen kann.

Mit der Anweisung preload können Sie eine frühzeitige Anfrage nach Ressourcen für Webschriftarten starten. Mit der Anweisung preload werden Webschriftarten schon früh beim Seitenaufbau erkannt und im Browser sofort heruntergeladen, ohne darauf zu warten, dass das Stylesheet heruntergeladen und geparst wurde. Die Anweisung preload wartet nicht, bis die Schriftart auf der Seite benötigt wird.

<!-- The `crossorigin` attribute is required for fonts—even
     self-hosted ones, as fonts are considered CORS resources. -->
<link rel="preload" as="font" href="/fonts/OpenSans-Regular-webfont.woff2" crossorigin>

@font-face-Deklarationen inline einfügen

Wenn Sie Schriftarten früher beim Seitenaufbau sichtbar machen möchten, können Sie CSS-Code, der das Rendering blockiert, einschließlich der @font-face-Deklarationen, in den <head>-Bereich Ihres HTML-Codes mithilfe des <style>-Elements einbinden. In diesem Fall erkennt der Browser Webschriftarten früher beim Laden der Seite, da er nicht auf den Download eines externen Stylesheets warten muss.

Das Einfügen von @font-face-Deklarationen hat einen Vorteil gegenüber dem preload-Hinweis, da der Browser nur die zum Rendern der aktuellen Seite erforderlichen Schriftarten herunterlädt. So vermeiden Sie das Risiko, nicht verwendete Schriftarten herunterzuladen.

Herunterladen

Nachdem Webschriftarten erkannt und sichergestellt haben, dass sie für das Layout der aktuellen Seite benötigt werden, kann der Browser sie herunterladen. Die Anzahl der Webschriftarten, ihre Codierung und ihre Dateigröße können erheblichen Einfluss darauf haben, wie schnell eine Webschrift im Browser heruntergeladen und gerendert wird.

Webschriftarten selbst hosten

Webschriftarten können über Dienste von Drittanbietern wie Google Fonts bereitgestellt oder von Ihrem Ursprungsserver selbst gehostet werden. Wenn Sie einen Drittanbieterdienst verwenden, muss Ihre Webseite eine Verbindung zur Domain des Anbieters herstellen, bevor die erforderlichen Webschriftarten heruntergeladen werden können. Dies kann das Erkennen und anschließende Herunterladen von Webschriftarten verzögern.

Dieser Aufwand kann mithilfe des Ressourcenhinweiss preconnect reduziert werden. Mit preconnect können Sie den Browser anweisen, eine Verbindung zum ursprungsübergreifenden Protokoll früher als gewöhnlich zu öffnen:

<link rel="preconnect" href="https://fonts.googleapis.com">  
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

Das vorherige HTML-Snippet weist den Browser an, eine Verbindung zu fonts.googleapis.com und eine CORS-Verbindung zu fonts.gstatic.com herzustellen. Einige Schriftartenanbieter wie Google Fonts stellen CSS- und Schriftressourcen unterschiedlicher Herkunft zur Verfügung.

Sie brauchen keine Drittanbieterverbindung, indem Sie Ihre Webschriftarten selbst hosten. In den meisten Fällen sind selbst gehostete Webschriftarten schneller als der ursprungsübergreifende Download. Wenn du Webschriftarten selbst hosten möchtest, achte darauf, dass deine Website ein Content Delivery Network (CDN), HTTP/2 oder HTTP/3 verwendet und die richtigen Caching-Header für die Webschriftarten festlegt, die du für deine Website benötigst.

Nur WOFF2 und WOFF2 verwenden

WOFF2 bietet breite Browserunterstützung und die beste Komprimierung – bis zu 30% besser als WOFF. Die reduzierte Dateigröße führt zu kürzeren Downloadzeiten. Das WOFF2-Format ist häufig das einzige, das für eine vollständige Kompatibilität in modernen Browsern erforderlich ist.

Unterteilen Sie Ihre Webschriftarten.

Webschriftarten enthalten in der Regel eine Vielzahl verschiedener Bildzeichen, die erforderlich sind, um die Vielfalt der in verschiedenen Sprachen verwendeten Zeichen darzustellen. Wenn auf Ihrer Seite Inhalte nur in einer Sprache oder mit einem einzigen Alphabet bereitgestellt werden, können Sie die Größe der Webschriftarten über eine Untereinstellung reduzieren. Dazu wird häufig eine Zahl oder ein Bereich von Unicode-Code-Punkten angegeben.

Eine Teilmenge ist ein reduzierter Satz an Bildzeichen, die in der ursprünglichen Webfont-Datei enthalten waren. Anstatt alle Bildzeichen zu verwenden, stellt Ihre Seite beispielsweise eine bestimmte Teilmenge für lateinische Zeichen bereit. Je nach benötigter Teilmenge kann das Entfernen von Glyphen die Größe einer Schriftartdatei erheblich reduzieren.

Einige Anbieter von Webschriftarten wie Google Fonts bieten Teilmengen automatisch über einen Abfragestringparameter an. Über die URL https://fonts.googleapis.com/css?family=Roboto&subset=latin wird beispielsweise ein Stylesheet mit der Roboto-Webschriftart bereitgestellt, die nur das lateinische Alphabet verwendet.

Wenn Sie Ihre Webschriftarten selbst hosten, besteht der nächste Schritt darin, diese Teilmengen mithilfe von Tools wie Glyphanger oder Subfont selbst zu generieren und zu hosten.

Falls Sie jedoch nicht die Möglichkeit haben, Ihre eigenen Webschriftarten selbst zu hosten, können Sie die von Google Fonts bereitgestellten Webschriftarten teilweise verwenden. Geben Sie dazu einen zusätzlichen text-Abfragestringparameter an, der nur die für Ihre Website erforderlichen Unicode-Codepunkte enthält. Wenn Sie beispielsweise eine Schriftart für das Displaynetzwerk auf Ihrer Website haben, für die nur eine geringe Anzahl von Zeichen für die Wortgruppe „Willkommen“ erforderlich ist, können Sie diese Teilmenge über Google Fonts über die folgende URL anfordern: https://fonts.googleapis.com/css?family=Monoton&text=Welcome. Dadurch kann die Menge an Webschriftarten, die für ein einzelnes Schriftbild auf Ihrer Website benötigt wird, deutlich reduziert werden, falls eine solche extreme Untereinstellung auf Ihrer Website nützlich sein kann.

Schriftdarstellung

Nachdem der Browser eine Webschrift erkannt und heruntergeladen hat, kann sie gerendert werden. Standardmäßig blockiert der Browser das Rendern von Text mit einer Webschriftart, bis er heruntergeladen wird. Sie können das Textrenderingverhalten des Browsers anpassen und festlegen, welcher Text angezeigt bzw. nicht angezeigt werden soll, bis die Webschrift vollständig mit der CSS-Eigenschaft font-display geladen wurde.

block

Der Standardwert für font-display ist block. Mit block blockiert der Browser das Rendern von Text, der die angegebene Webfont verwendet. Verschiedene Browser verhalten sich geringfügig unterschiedlich. Chromium und Firefox blockieren das Rendering bis zu drei Sekunden lang, bevor ein Fallback verwendet wird. Safari wird so lange blockiert, bis die Webschriftart geladen ist.

swap

swap ist der am häufigsten verwendete font-display-Wert. swap blockiert das Rendering nicht und zeigt den Text sofort in einem Fallback an, bevor er in der angegebenen Webschriftart ersetzt wird. So können Sie Inhalte sofort anzeigen, ohne auf den Download der Webschriftart warten zu müssen.

Der Nachteil von swap besteht jedoch darin, dass sie zu einer Layoutverschiebung führt, wenn die im CSS angegebene Fallback-Webschriftart und die Webschriftart stark in Bezug auf Zeilenhöhe, Unterschneidung und andere Schriftartmesswerte variieren. Dies kann sich auf die CLS Ihrer Website auswirken, wenn Sie nicht unbedingt den preload-Hinweis verwenden, um eine Ressource für Webschriftarten so schnell wie möglich zu laden, oder wenn Sie keine anderen font-display-Werte berücksichtigen.

fallback

Der Wert fallback für font-display stellt einen Kompromiss zwischen block und swap dar. Im Gegensatz zu swap blockiert der Browser das Rendern einer Schriftart, Fallback-Text wird jedoch nur für sehr kurze Zeit eingefügt. Im Gegensatz zu block ist der Sperrzeitraum jedoch extrem kurz.

Die Verwendung des Werts fallback funktioniert gut in schnellen Netzwerken. Wenn die Webschriftart schnell heruntergeladen wird, wird sie sofort beim anfänglichen Rendering der Seite verwendet. Bei langsamen Netzwerken wird der Fallback-Text jedoch nach Ablauf des Blockierungszeitraums zuerst angezeigt und dann ausgetauscht, wenn die Webschriftart verfügbar ist.

optional

optional ist der strengste font-display-Wert und verwendet die Webfont-Ressource nur, wenn der Download innerhalb von 100 Millisekunden erfolgt. Wenn eine Webschriftart länger dauert, wird sie nicht auf der Seite verwendet. Der Browser verwendet das Fallback-Schriftbild für die aktuelle Navigation, während die Webschriftart im Hintergrund heruntergeladen und in den Browser-Cache abgelegt wird.

Daher kann die Webschriftart bei nachfolgenden Seitennavigationen sofort verwendet werden, da sie bereits heruntergeladen wurde. font-display: optional vermeidet den Layout Shift von swap, aber einige Nutzer sehen die Webschriftart nicht, wenn sie zu spät bei der ersten Seitennavigation eintrifft.

Schriftartendemos

Wissen testen

Wann lädt der Browser eine Webfont-Ressource herunter (vorausgesetzt, sie wird nicht mit einer preload-Anweisung abgerufen)?

Sobald der Verweis darauf in einem Stylesheet erkannt wird.
Versuche es bitte noch einmal.
Das CSSOM der Seite wird erstellt und bestimmt, dass die Webschriftart für das aktuelle Layout benötigt wird.
Richtig!

Welches ist das einzige (und effizienteste) Format, das erforderlich ist, um Webschriftarten in allen modernen Browsern bereitzustellen?

WOFF2
Richtig!
WOFF
Versuche es bitte noch einmal.
TTF
Versuche es bitte noch einmal.
EOT
Versuche es bitte noch einmal.

Nächster Schritt: Code-Split-JavaScript

Sobald Sie ein Verständnis für die Optimierung von Schriftarten haben, können Sie mit dem nächsten Modul fortfahren. Darin geht es um ein Thema, bei dem Sie mit großer Wahrscheinlichkeit die anfängliche Seitenladegeschwindigkeit für Ihre Nutzer verbessern können und das Laden von JavaScript durch Codeaufteilung aufgeschoben wird. Dadurch können Sie die Bandbreite und die CPU-Konflikte während der Startphase einer Seite so gering wie möglich halten. Das ist ein Zeitraum, in dem Nutzer sehr wahrscheinlich mit ihr interagieren.