Zapobiegaj przesuwaniu układu i przebłyskom niewidocznego tekstu (FOIT) dzięki wstępnym wczytywaniu opcjonalnych czcionek

Począwszy od Chrome 83 można łączyć atrybuty link rel="preload" i font-display: optional, aby całkowicie wyeliminować problemy z wyświetlaniem

Dzięki optymalizacji cykli renderowania Chrome 83 eliminuje przesuwanie układu podczas wstępnego ładowania opcjonalnych czcionek. Połączenie <link rel="preload">font-display: optional to najskuteczniejsza metoda, która gwarantuje brak zniekształceń układu podczas renderowania czcionek niestandardowych.

Zgodność z przeglądarką

Aby uzyskać aktualne informacje o obsługiwanych przeglądarkach, zapoznaj się z danymi w MDN:

Renderowanie czcionek

Zmiana układu lub ponowny układ występuje, gdy zasób na stronie internetowej zmienia się dynamicznie, co powoduje „przesunięcie” treści. Pobieranie i renderowanie czcionek internetowych może bezpośrednio powodować zmiany układu w jednym z 2 sposobów:

  • czcionka zastępcza jest zastępowana nową czcionką („miganie tekstu bez stylizacji”);
  • „Niewidoczny” tekst jest wyświetlany do momentu, aż nowa czcionka zostanie wyrenderowana na stronie („miganie niewidzialnego tekstu”).

Właściwość CSS font-display umożliwia modyfikowanie zachowania renderowania czcionek niestandardowych za pomocą różnych obsługiwanych wartości (auto, block, swap, fallbackoptional). Wybór wartości zależy od preferowanego zachowania czcionek wczytywanych asynchronicznie. Do tej pory każda z tych obsługiwanych wartości mogła wywołać przeformatowanie w jednym z 2 sposobów wymienionych powyżej.

Opcjonalne czcionki

Usługa font-display używa osi czasu z 3 okresami, aby obsługiwać czcionki, które muszą zostać pobrane, zanim będą mogły zostać wyrenderowane:

  • Blokuj:renderuj „niewidoczny” tekst, ale przełącz się na czcionkę internetową, gdy tylko się załaduje.
  • Zamienianie: renderowanie tekstu za pomocą zastępczej czcionki systemowej, ale przełączenie na czcionkę internetową, gdy tylko się załaduje.
  • Niepowodzenie: renderowanie tekstu za pomocą czcionki systemowej.

Wcześniej czcionki oznaczone symbolem font-display: optional miały okres blokowania wynoszący 100 ms i brak okresu wymiany. Oznacza to, że „niewidoczny” tekst jest wyświetlany przez bardzo krótki czas przed przełączeniem się na czcionkę zapasową. Jeśli czcionka nie zostanie pobrana w ciągu 100 ms, zostanie użyta czcionka zapasowa i nie nastąpi wymiana.

Diagram pokazujący poprzednie opcjonalne zachowanie czcionki w przypadku, gdy nie można jej wczytać
Wcześniejsze font-display: optional zachowanie w Chrome, gdy czcionka jest pobierana po okresie blokady trwającej 100 ms

Jeśli jednak czcionka zostanie pobrana przed upływem 100 ms, będzie renderowana i używana na stronie.

Diagram pokazujący poprzednie opcjonalne zachowanie czcionki podczas wczytywania czcionki w czasie
Wcześniejsze font-display: optional zachowanie w Chrome, gdy czcionka jest pobierana przed okresem blokady 100 ms

Chrome ponownie renderuje stronę 2 razy w obu przypadkach, niezależnie od tego, czy używany jest czcionka zastępcza, czy czcionka niestandardowa wczytała się w czasie. Powoduje to lekkie migotanie niewidocznego tekstu, a w przypadku renderowania nowego czcionki – zniekształcenia układu, które powodują przesuwanie się niektórych elementów strony. Dzieje się tak nawet wtedy, gdy czcionka jest przechowywana w pamięci podręcznej dysku przeglądarki i może zostać załadowana na długo przed zakończeniem okresu blokady.

W Chrome 83 wprowadziliśmy optymalizacje, które całkowicie usuwają pierwszy cykl renderowania w przypadku opcjonalnych czcionek, które są wstępnie wczytane przez <link rel="preload'>. Zamiast tego renderowanie jest blokowane, dopóki nie zakończy się wczytywanie czcionki niestandardowej lub nie upłynie określony czas. Obecnie ten limit czasu wynosi 100 ms, ale w najbliższej przyszłości może się zmienić, aby zoptymalizować wydajność.

Diagram pokazujący nowe zachowanie w przypadku wczytania opcjonalnej czcionki wstępnie załadowanej, gdy nie można jej wczytać
Nowe zachowanie font-display: optional w Chrome, gdy czcionki są wstępnie wczytane i pobierane po okresie blokady 100 ms (brak mignięcia niewidocznego tekstu)
Diagram pokazujący nowe zachowanie wstępnie załadowanej opcjonalnej czcionki, gdy czcionka wczytuje się na czas
Nowe zachowanie font-display: optional w Chrome, gdy czcionki są wstępnie wczytane i pobierane przed okresem blokady 100 ms (brak mignięcia niewidocznego tekstu)

Wstępne wczytywanie opcjonalnych czcionek w Chrome eliminuje możliwość wystąpienia zacięcia układu i migania tekstów bez stylów. Odpowiada to wymaganemu zachowaniu określonemu w CSS Fonts Module Level 4, w którym opcjonalne czcionki nie powinny powodować ponownego układania, a agenty użytkownika mogą opóźnić renderowanie przez odpowiedni czas.

Chociaż wstępne wczytanie opcjonalnej czcionki nie jest konieczne, znacznie zwiększa szanse na jej załadowanie przed pierwszym cyklem renderowania, zwłaszcza jeśli nie jest ona jeszcze przechowywana w pamięci podręcznej przeglądarki.

Podsumowanie

Zespół Chrome chętnie pozna Twoje wrażenia związane z wstępnym wczytywaniem czcionek opcjonalnych z tymi nowymi optymalizacjami. Jeśli napotkasz problemy lub chcesz zaproponować nową funkcję, prześlij problem.