Webschriftarten für Core Web Vitals optimieren
In diesem Artikel werden Best Practices für die Leistung von Schriftarten erläutert. Webschriftarten können die Leistung auf unterschiedliche Art und Weise beeinflussen:
- Verzögertes Text-Rendering: Wenn eine Webschriftart nicht geladen wurde, verzögern Browser in der Regel das Text-Rendering. In vielen Fällen verzögert sich dadurch der First Contentful Paint (FCP). In einigen Situationen wird dadurch der Largest Contentful Paint (LCP) verzögert.
- Layoutverschiebungen: Das Ersetzen von Schriftarten kann Layoutverschiebungen verursachen und sich so auf den Cumulative Layout Shift (CLS) auswirken. Diese Layoutverschiebungen treten auf, wenn eine Webschriftart und eine Fallback-Schriftart unterschiedlich viel Platz auf der Seite einnehmen.
Dieser Artikel ist in drei Abschnitte unterteilt: Schriftarten laden, Schriftarten bereitstellen und Schriftarten rendern. In jedem Abschnitt wird erläutert, wie dieser bestimmte Aspekt des Schriftartenlebenszyklus funktioniert, und es werden entsprechende Best Practices bereitgestellt.
Schriftart wird geladen
Schriftarten sind in der Regel wichtige Ressourcen, da Nutzer ohne sie möglicherweise den Seiteninhalt nicht sehen können. Daher konzentrieren sich die Best Practices für das Laden von Schriftarten im Allgemeinen darauf, dass Schriftarten so früh wie möglich geladen werden. Besondere Sorgfalt sollte auf Schriftarten angewendet werden, die von Websites von Drittanbietern geladen werden, da für das Herunterladen dieser Schriftartdateien separate Verbindungseinrichtungen erforderlich sind.
Wenn Sie nicht sicher sind, ob die Schriftarten Ihrer Seite rechtzeitig angefordert werden, finden Sie in den Chrome-Entwicklertools im Bereich Netzwerk auf dem Tab Timing weitere Informationen.
Informationen zu @font-face
Bevor wir uns mit den Best Practices für das Laden von Schriftarten befassen, ist es wichtig zu verstehen, wie @font-face
funktioniert und wie sich das auf das Laden von Schriftarten auswirkt.
Die @font-face
-Deklaration ist ein wesentlicher Bestandteil der Arbeit mit Webschriften. Es gibt mindestens den Namen an, der zur Bezugnahme auf die Schriftart verwendet wird, und gibt den Speicherort der entsprechenden Schriftartdatei an.
@font-face {
font-family: "Open Sans";
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2");
}
Es ist ein weit verbreiteter Irrtum, dass ein Schriftschnitt angefordert wird, wenn eine @font-face
-Deklaration gefunden wird. Das ist nicht der Fall. Die @font-face
-Deklaration allein löst keinen Schriftartendownload aus. Ein Schriftschnitt wird nur heruntergeladen, wenn er im Stylesheet auf der Seite referenziert wird. Beispiel:
@font-face {
font-family: "Open Sans";
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2");
}
h1 {
font-family: "Open Sans"
}
Mit anderen Worten, im obigen Beispiel wird Open Sans
nur heruntergeladen, wenn die Seite ein <h1>
-Element enthält.
Bei der Optimierung von Schriftarten sollten Sie also stylesheets genauso berücksichtigen wie die Schriftdateien selbst. Eine Änderung des Inhalts oder der Übermittlung von Stylesheets kann sich erheblich auf die Zeit auswirken, zu der Schriftarten eintreffen. Wenn Sie nicht verwendetes CSS entfernen und Stylesheets aufteilen, lässt sich auch die Anzahl der Schriftarten reduzieren, die von einer Seite geladen werden.
Inline-Schriftartdeklarationen
Die meisten Websites würden stark davon profitieren, Schriftdeklarationen und andere wichtige Stile in den <head>
-Abschnitt des Hauptdokuments einzufügen, anstatt sie in einem externen Stylesheet aufzunehmen. So kann der Browser die Schriftdeklarationen früher erkennen, da er nicht auf das Herunterladen des externen Stylesheets warten muss.
<head>
<style>
@font-face {
font-family: "Open Sans";
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2");
}
body {
font-family: "Open Sans";
}
...etc.
</style>
</head>
Das Einfügen von kritischem CSS kann ein fortgeschrittenes Verfahren sein, das nicht für alle Websites geeignet ist. Die Leistungsvorteile sind klar, aber es sind zusätzliche Prozesse und Build-Tools erforderlich, um sicherzustellen, dass das erforderliche CSS – und idealerweise nur das kritische CSS – korrekt eingefügt wird und dass zusätzliches CSS ohne Renderblockierung ausgeliefert wird.
Vorabverbindung zu wichtigen Drittanbieterquellen herstellen
Wenn Ihre Website Schriftarten von einer Drittanbieterwebsite lädt, sollten Sie unbedingt den Ressourcenhinweis preconnect
verwenden, um frühzeitig Verbindungen zum Drittanbieter-Ursprung herzustellen. Ressourcenhinweise sollten im <head>
des Dokuments platziert werden. Mit dem Ressourcenhinweis unten wird eine Verbindung zum Laden des Schriftart-Stylesheets eingerichtet.
<head>
<link rel="preconnect" href="https://fonts.com">
</head>
Um die Verbindung, die zum Herunterladen der Schriftartdatei verwendet wird, vorab zu verbinden, fügen Sie einen separaten preconnect
-Ressourcenhinweis mit dem Attribut crossorigin
hinzu. Im Gegensatz zu Stylesheets müssen Schriftdateien über eine CORS-Verbindung gesendet werden.
<head>
<link rel="preconnect" href="https://fonts.com">
<link rel="preconnect" href="https://fonts.com" crossorigin>
</head>
Wenn Sie den Ressourcenhinweis preconnect
verwenden, beachten Sie, dass ein Schriftartenanbieter Stylesheets und Schriftarten aus verschiedenen Quellen bereitstellen kann. So würde der Ressourcenhinweis preconnect
beispielsweise für Google Fonts verwendet.
<head>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
</head>
Vorsicht beim Laden von Schriftarten über preload
preload
ist zwar sehr effektiv, um Schriftarten schon früh im Ladevorgang der Seite sichtbar zu machen, aber das geht zu Lasten der Browserressourcen, die für das Laden anderer Ressourcen benötigt werden.
Es kann effektiver sein, Schriftdeklarationen einzufügen und Stylesheets anzupassen. Diese Anpassungen kommen der Ursache für spät entdeckte Schriftarten näher als eine Behelfslösung.
Auch die Verwendung von preload
als Strategie zum Laden von Schriftarten sollte mit Bedacht eingesetzt werden, da dadurch einige der im Browser integrierten Verhandlungsstrategien für Inhalte umgangen werden. preload
ignoriert beispielsweise unicode-range
-Deklarationen und sollte nur mit Bedacht verwendet werden, um ein einzelnes Schriftformat zu laden.
Bei externen Stylesheets kann das Vorladen der wichtigsten Schriftarten jedoch sehr effektiv sein, da der Browser sonst erst viel später erkennt, ob die Schrift benötigt wird.
Schriftartübermittlung
Eine schnellere Bereitstellung von Schriftarten führt zu einem schnelleren Text-Rendering. Wenn eine Schriftart außerdem früh genug bereitgestellt wird, können Layoutverschiebungen durch Schriftartwechsel vermieden werden.
Selbst gehostete Schriftarten verwenden
Theoretisch sollte die Verwendung einer selbst gehosteten Schriftart eine bessere Leistung bieten, da die Verbindungseinrichtung durch einen Drittanbieter entfällt. In der Praxis sind die Leistungsunterschiede zwischen diesen beiden Optionen jedoch weniger klar: So wurde im Web Almanac festgestellt, dass Websites mit Schriftarten von Drittanbietern schneller gerendert wurden als Websites mit selbst erstellten Schriftarten.
Wenn Sie selbst gehostete Schriftarten verwenden möchten, prüfen Sie, ob auf Ihrer Website ein Content Delivery Network (CDN) und HTTP/2 verwendet werden. Ohne diese Technologien ist es viel unwahrscheinlicher, dass selbst gehostete Schriftarten eine bessere Leistung erzielen. Weitere Informationen finden Sie unter Content Delivery Networks.
Wenn Sie eine selbst gehostete Schriftart verwenden, sollten Sie auch einige der Optimierungen für Schriftartdateien anwenden, die Drittanbieter für Schriftarten normalerweise automatisch bereitstellen, z. B. die Untereinstellung der Schriftart und die WOFF2-Komprimierung. Der Aufwand für die Anwendung dieser Optimierungen hängt davon ab, welche Sprachen auf Ihrer Website unterstützt werden. Die Optimierung von Schriftarten für CJK-Sprachen kann besonders schwierig sein.
WOFF2 verwenden
Von den modernen Schriftarten ist WOFF2 die neueste, hat die breiteste Browserunterstützung und bietet die beste Komprimierung. Da WOFF2 Brotli verwendet, wird es um 30 % besser komprimiert als WOFF. Das führt zu weniger heruntergeladenen Daten und damit zu einer höheren Leistung.
Aufgrund der Browserunterstützung empfehlen Experten jetzt, nur WOFF2 zu verwenden:
Wir sind der Meinung, dass es an der Zeit ist, zu sagen: Verwenden Sie nur WOFF2 und vergessen Sie alles andere.
Bram Stein, aus dem Web Almanac 2022
Dadurch werden dein CSS und dein Workflow erheblich vereinfacht und versehentliche doppelte oder falsche Schriftdownloads werden verhindert. WOFF2 wird jetzt überall unterstützt. Verwenden Sie also WOFF2, es sei denn, Sie müssen wirklich uralte Browser unterstützen. Wenn das nicht möglich ist, sollten Sie in diesen älteren Browsern gar keine Webschriften ausliefern. Dies stellt kein Problem dar, wenn Sie eine solide Fallback-Strategie haben. Besucher älterer Browser sehen nur Ihre Fallback-Schriftarten.
Teilmengen von Schriftarten
Schriftdateien enthalten in der Regel eine große Anzahl von Glyphen für alle unterstützten Zeichen. Möglicherweise benötigen Sie aber nicht alle Zeichen auf Ihrer Seite und können die Größe der Schriftdateien durch eine Untermenge der Schriftarten reduzieren.
Der unicode-range
-Beschreibungsblock in der @font-face
-Deklaration informiert den Browser darüber, für welche Zeichen eine Schriftart verwendet werden kann.
@font-face {
font-family: "Open Sans";
src: url("/fonts/OpenSans-Regular-webfont.woff2") format("woff2");
unicode-range: U+0025-00FF;
}
Eine Schriftdatei wird heruntergeladen, wenn die Seite ein oder mehrere Zeichen enthält, die dem Unicode-Bereich entsprechen. unicode-range
wird häufig verwendet, um je nach der für den Seiteninhalt verwendeten Sprache verschiedene Schriftartdateien bereitzustellen.
unicode-range
wird oft in Verbindung mit der Technik des Subsettierungs verwendet. Ein Teilschriftschnitt enthält einen kleineren Teil der Schriftzeichen, die in der ursprünglichen Schriftdatei enthalten waren. Anstatt allen Nutzern alle Zeichen anzuzeigen, könnte eine Website beispielsweise separate Schriftschnitte für lateinische und kyrillische Zeichen generieren. Die Anzahl der Schriftzeichen pro Schriftart variiert stark: Lateinische Schriftarten haben in der Regel 100 bis 1.000 Schriftzeichen pro Schriftart; CJK-Schriftarten können über 10.000 Zeichen haben. Durch das Entfernen nicht verwendeter Zeichen kann die Dateigröße einer Schriftart erheblich reduziert werden.
Einige Schriftartenanbieter stellen automatisch verschiedene Versionen von Schriftarten mit unterschiedlichen Teilmengen bereit. Google Fonts tut dies zum Beispiel standardmäßig:
/* devanagari */
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJbecnFHGPezSQ.woff2) format('woff2');
unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
}
/* latin-ext */
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJnecnFHGPezSQ.woff2) format('woff2');
unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
/* latin */
@font-face {
font-family: 'Poppins';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url(https://fonts.gstatic.com/s/poppins/v20/pxiEyp8kv8JHgFVrJJfecnFHGPc.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
Beim Wechsel zum Self-Hosting wird diese Optimierung leicht übersehen, was zu größeren Schriftdateien lokal führen kann.
Es ist auch möglich, Schriftarten manuell zu unterteilen, wenn Ihr Schriftartenanbieter dies zulässt, entweder über eine API (Google Fonts unterstützt dies über einen text
-Parameter) oder durch manuelle Bearbeitung der Schriftdateien und anschließendes Self-Hosting. Zu den Tools zum Generieren von Schriftartenuntergruppen gehören subfont und glyphanger. Prüfen Sie jedoch, ob die Lizenz für die von Ihnen verwendeten Schriftarten die Untergruppierung und das Self-Hosting zulässt.
Weniger Webschriftarten verwenden
Die am schnellsten zu liefernde Schriftart ist eine, die gar nicht angefordert wird. Systemschriftarten und variable Schriftarten sind zwei Möglichkeiten, die Anzahl der auf Ihrer Website verwendeten Webschriftarten potenziell zu reduzieren.
Eine Systemschriftart ist die Standardschriftart, die in der Benutzeroberfläche des Geräts eines Nutzers verwendet wird. Systemschriften variieren in der Regel je nach Betriebssystem und Version. Da die Schriftart bereits installiert ist, muss sie nicht heruntergeladen werden. Systemschriften eignen sich besonders gut für den Fließtext.
Wenn Sie die Systemschriftart in Ihrem CSS verwenden möchten, geben Sie system-ui
als Schriftfamilie an:
font-family: system-ui
Variable Schriftarten können als Ersatz für mehrere Schriftdateien verwendet werden. Bei Variablen wird der Schriftstil „Standard“ festgelegt und es werden „Achsen“ zur Bearbeitung der Schriftart angegeben. Beispielsweise kann eine variable Schriftart mit einer Weight
-Achse verwendet werden, um Buchstaben zu implementieren, für die bisher separate Schriftarten für Light, Normal, Fett und Extrafett erforderlich waren.
Nicht alle profitieren vom Wechsel zu variablen Schriftarten. Variable Schriftarten enthalten viele Stile und haben daher in der Regel eine größere Dateigröße als einzelne nicht variable Schriftarten, die nur einen Stil enthalten. Die größte Verbesserung durch die Verwendung variabler Schriftarten erzielen Websites, die eine Vielzahl von Schriftstilen und -schnitten verwenden (und verwenden müssen).
Schrift-Rendering
Wenn der Browser auf eine noch nicht geladene Webschriftart stößt, steht er vor einem Dilemma: Sollte er das Rendern von Text verzögern, bis die Webschriftart eingetroffen ist? Oder soll der Text in einer Fallback-Schriftart gerendert werden, bis die Webschriftart erscheint?
Verschiedene Browser verarbeiten dieses Szenario unterschiedlich. Standardmäßig blockieren Chromium- und Firefox-Browser die Textdarstellung für bis zu 3 Sekunden, wenn die entsprechende Webschriftart nicht geladen wurde. Safari blockiert das Rendern von Text auf unbestimmte Zeit.
Dieses Verhalten kann mit dem Attribut font-display
konfiguriert werden. Diese Entscheidung kann erhebliche Auswirkungen haben: font-display
kann sich auf LCP, FCP und die Layoutstabilität auswirken.
Eine geeignete font-display
-Strategie auswählen
font-display
informiert den Browser darüber, wie mit dem Text-Rendering fortgefahren werden soll, wenn die zugehörige Webschrift nicht geladen wurde. Sie wird pro Schriftart definiert.
@font-face {
font-family: Roboto, Sans-Serif
src: url(/fonts/roboto.woff) format('woff'),
font-display: swap;
}
Für font-display
gibt es fünf mögliche Werte:
Wert | Blockierungszeitraum | Tauschzeitraum |
---|---|---|
Automatisch | Variiert je nach Browser | Je nach Browser |
Blockieren | 2–3 Sekunden | Unbegrenzt |
Swap-Speicher | 0ms | Unbegrenzt |
Fallback | 100 ms | 3 Sekunden |
Optional | 100 ms | Keine |
- Sperrzeitraum: Der Sperrzeitraum beginnt, wenn der Browser eine Webschriftart anfordert. Wenn die Webschrift während des Blockierungszeitraums nicht verfügbar ist, wird sie in einer unsichtbaren Fallback-Schrift gerendert und der Text ist für den Nutzer nicht sichtbar. Wenn die Schriftart am Ende des Blockzeitraums nicht verfügbar ist, wird sie im Fallback-Schriftbild gerendert.
- Auslagerungszeitraum: Der Auslagerungszeitraum folgt auf den Blockierungszeitraum. Wenn der Webfont während des Austauschzeitraums verfügbar wird, wird er ersetzt.
font-display
Strategien spiegeln unterschiedliche Ansichten zum Kompromiss zwischen Leistung und Ästhetik wider. Daher ist es schwierig, einen empfohlenen Ansatz zu geben, da es von den individuellen Vorlieben abhängt, wie wichtig die Webschrift für die Seite und die Marke ist und wie störend eine spät eintreffende Schrift beim Austausch sein kann.
Für die meisten Websites sind die folgenden drei Strategien am besten geeignet:
Wenn die Leistung an erster Stelle steht: Verwenden Sie
font-display: optional
. Dies ist der leistungsstärkste Ansatz: Das Rendern von Text wird nicht länger als 100 ms verzögert und es gibt keine Layoutänderungen aufgrund von Schriftartwechseln. Der Nachteil dabei ist jedoch, dass der Webfont nicht verwendet wird, wenn er zu spät eintrifft.Wenn die schnelle Anzeige von Text vorrangig ist, Sie aber trotzdem dafür sorgen möchten, dass der Web-Schriftschnitt verwendet wird: Verwenden Sie
font-display: swap
, aber sorgen Sie dafür, dass der Schriftschnitt früh genug gesendet wird, damit er keine Layoutänderungen verursacht. Der Nachteil dieser Option ist die abrupte Änderung, wenn die Schriftart zu spät eintrifft.Wenn es wichtig ist, dass Text in einer Webschriftart angezeigt wird: Verwenden Sie
font-display: block
, aber sorgen Sie dafür, dass die Schriftart früh genug gesendet wird, damit die Verzögerung des Texts minimiert wird. Der Nachteil dabei ist, dass der Text erst verzögert angezeigt wird. Hinweis: Trotz dieser Verzögerung kann es dennoch zu einer Layoutverschiebung kommen, da der Text tatsächlich unsichtbar dargestellt wird und der Platz für die Fallback-Schriftart daher verwendet wird, um den Platz zu reservieren. Sobald die Webschrift geladen ist, kann dies zusätzlichen Platz und damit eine Verschiebung erfordern. Diese Änderung ist jedoch möglicherweise weniger auffällig als beifont-display: swap
, da der Text selbst nicht verschoben wird.
Denken Sie auch daran, dass diese beiden Ansätze kombiniert werden können: Verwenden Sie beispielsweise font-display: swap
für Branding und andere visuell auffällige Seitenelemente und font-display: optional
für Schriftarten im Fließtext.
Abweichung zwischen Fallback- und Webschrift verringern
Sie können die neuen size-adjust
-Attribute verwenden, um die CLS-Auswirkungen zu reduzieren. Weitere Informationen finden Sie in diesem Artikel zu CSS size-adjust
. Dies stellt eine neue Ergänzung unseres Toolset dar, ist daher fortgeschrittener und derzeit etwas manuell. Es ist aber definitiv ein Tool, mit dem man experimentieren und auf Verbesserungen der Tools achten sollte.
Fazit
Web-Schriftarten sind immer noch ein Leistungsengpass, aber wir haben immer mehr Möglichkeiten, sie zu optimieren, um diesen Engpass so weit wie möglich zu reduzieren.