Ab Chrome 83 können link rel="preload" und font-display: optional kombiniert werden, um Layout-Verzögerungen vollständig zu entfernen.
Durch die Optimierung der Rendering-Zyklen eliminiert Chrome 83 Layoutverschiebungen beim Vorabladen optionaler Schriftarten.
Die Kombination von <link rel="preload">
und font-display: optional
ist die effektivste Methode, um sicherzustellen, dass beim Rendern benutzerdefinierter Schriftarten keine Layoutverzögerungen auftreten.
Browserkompatibilität
Aktuelle Informationen zur browserübergreifenden Unterstützung findest du in den Daten von MDN:
Schrift-Rendering
Bei Layoutverschiebungen oder Layoutverschiebungen ändert sich eine Ressource auf einer Webseite dynamisch, was zu einer „Verlagerung“ des Inhalts führt. Das Abrufen und Rendern von Webschriftarten kann auf zwei Arten direkt zu Layoutverschiebungen führen:
- Eine Fallback-Schriftart wird durch eine neue Schriftart ersetzt (nicht formatierter Text im Flash-Format)
- "Unsichtbarer" Text wird angezeigt, bis eine neue Schriftart auf der Seite gerendert wird ("Blitz von unsichtbarem Text").
Mit der CSS-Eigenschaft font-display
kann das Renderingverhalten von benutzerdefinierten Schriftarten über eine Reihe verschiedener unterstützter Werte (auto
, block
, swap
, fallback
und optional
) geändert werden. Die Wahl des zu verwendenden Werts hängt vom bevorzugten Verhalten für asynchron geladene Schriftarten ab. Bis jetzt kann jedoch jeder dieser unterstützten Werte ein neues Layout auf eine der beiden oben genannten Arten auslösen.
Optionale Schriftarten
Die font-display
-Eigenschaft verwendet eine Zeitachse mit drei Zeiträumen, um Schriftarten zu verarbeiten, die heruntergeladen werden müssen, bevor sie gerendert werden können:
- Blockieren:Unsichtbarer Text wird gerendert, aber sobald der Ladevorgang abgeschlossen ist, wird zur Webschriftart gewechselt.
- Austauschen:Text wird mit einer Schriftart für das Fallback-System gerendert und nach dem Laden zur Webschriftart gewechselt.
- Fehlgeschlagen:Der Text wird mit einer Schriftart des Fallbacks gerendert.
Bisher hatten Schriftarten, die mit font-display: optional
gekennzeichnet sind, einen Blockzeitraum von 100 ms und keinen Auslagerungszeitraum. Das bedeutet, dass „unsichtbarer“ Text sehr kurz angezeigt wird, bevor zu einer Fallback-Schriftart gewechselt wird. Wenn die Schriftart nicht innerhalb von 100 ms heruntergeladen wird, wird die Fallback-Schriftart verwendet und es findet kein Austausch statt.
Wenn die Schriftart jedoch vor Ablauf des Blockierzeitraums von 100 ms heruntergeladen wird, wird die benutzerdefinierte Schriftart gerendert und auf der Seite verwendet.
Chrome rendert die Seite in beiden Fällen zweimal neu, unabhängig davon, ob die Fallback-Schriftart verwendet wird oder ob die benutzerdefinierte Schriftart rechtzeitig fertig geladen wurde. Dies führt zu einem leichten Flimmern von unsichtbarem Text und, wenn eine neue Schriftart gerendert wird, zu Layout-Verzögerungen, die einen Teil des Seiteninhalts verschieben. Dies geschieht auch dann, wenn die Schriftart im Festplatten-Cache des Browsers gespeichert ist und lange vor Ablauf der Sperrzeit geladen werden kann.
In Chrome 83 sind jetzt Optimierungen verfügbar, durch die der erste Renderingzyklus für optionale Schriftarten, die mit <link rel="preload'>
vorinstalliert sind, vollständig entfernt wird.
Stattdessen wird das Rendering blockiert, bis die benutzerdefinierte Schriftart vollständig geladen ist oder eine bestimmte Zeit verstrichen ist. Dieses Zeitlimit ist derzeit auf 100 ms festgelegt, kann sich aber in naher Zukunft ändern, um die Leistung zu optimieren.
Durch das Vorabladen optionaler Schriftarten in Chrome werden Layoutverzögerungen und Flash von nicht formatiertem Text vermieden. Dies entspricht dem in CSS Fonts Module Level 4 beschriebenen Verhalten, bei dem optionale Schriftarten nie zu einem neuen Layout führen dürfen und User-Agents stattdessen das Rendering für einen angemessenen Zeitraum verzögern können.
Eine optionale Schriftart muss zwar nicht vorab geladen werden, sie erhöht aber die Wahrscheinlichkeit, dass sie vor dem ersten Renderingzyklus geladen wird, erheblich, insbesondere wenn sie noch nicht im Browser-Cache gespeichert ist.
Fazit
Das Chrome-Team interessiert sich für Ihre Erfahrungen mit dem Vorabladen optionaler Schriftarten mit diesen neuen Optimierungen. Wenn Probleme auftreten oder Sie Vorschläge zu Funktionen machen möchten, melden Sie ein Problem.