Od Chrome 83 można łączyć link rel="preload" i font-display: optional, aby całkowicie wyeliminować przesunięcia układu
Dzięki optymalizacji cykli renderowania Chrome 83 eliminuje przesunięcia układu podczas wstępnego wczytywania czcionek opcjonalnych.
Połączenie <link rel="preload"> z font-display: optional to najskuteczniejszy sposób na
zagwarantowanie, że podczas renderowania czcionek niestandardowych nie wystąpią przesunięcia układu.
Zgodność z przeglądarką
Aktualne informacje o obsłudze w różnych przeglądarkach znajdziesz w danych MDN:
Renderowanie czcionek
Przesunięcie układu lub ponowne ułożenie elementów 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ć przesunięcia układu na 2 sposoby:
- Czcionka rezerwowa jest zastępowana nową czcionką („miganie tekstu bez stylu”).
- „Niewidoczny” tekst jest wyświetlany, dopóki nowa czcionka nie zostanie wyrenderowana na stronie („miganie niewidocznego tekstu”).
Właściwość CSS font-display umożliwia modyfikowanie
sposobu renderowania czcionek niestandardowych za pomocą różnych obsługiwanych wartości (auto, block,
swap, fallback, i optional). Wybór wartości zależy od preferowanego sposobu działania
w przypadku czcionek wczytywanych asynchronicznie. Jednak do tej pory każda z tych obsługiwanych wartości mogła powodować ponowne ułożenie elementów na jeden z 2 sposobów wymienionych powyżej.
Czcionki opcjonalne
Właściwość font-display używa osi czasu z 3 okresami do obsługi czcionek, które trzeba pobrać, zanim będzie można je wyrenderować:
- Block: renderuj „niewidoczny” tekst, ale przełącz się na czcionkę internetową, gdy tylko zakończy się jej wczytywanie.
- Swap: renderuj tekst za pomocą rezerwowej czcionki systemowej, ale przełącz się na czcionkę internetową, gdy tylko zakończy się jej wczytywanie.
- Fail: renderuj tekst za pomocą rezerwowej czcionki systemowej.
Wcześniej czcionki oznaczone jako font-display: optional miały 100-milisekundowy okres blokowania i nie miały okresu zamiany. Oznacza to, że „niewidoczny” tekst jest wyświetlany przez bardzo krótki czas, zanim zostanie zastąpiony czcionką rezerwową. Jeśli czcionka nie zostanie pobrana w ciągu 100 ms, używana jest czcionka rezerwowa i nie następuje zamiana.
font-display: optional w Chrome, gdy czcionka zostanie pobrana po 100-milisekundowym okresie blokowaniaJeśli jednak czcionka zostanie pobrana przed upływem 100-milisekundowego okresu blokowania, na stronie zostanie wyrenderowana i użyta czcionka niestandardowa.
font-display: optional w Chrome, gdy czcionka zostanie pobrana przed 100-milisekundowym okresem blokowaniaW obu przypadkach Chrome ponownie renderuje stronę 2 razy niezależnie od tego, czy używana jest czcionka rezerwowa, czy też czcionka niestandardowa zostanie wczytana na czas. Powoduje to lekkie miganie niewidocznego tekstu, a w przypadku renderowania nowej czcionki – przesunięcie układu, które przesuwa część treści strony. Dzieje się tak nawet wtedy, gdy czcionka jest przechowywana w pamięci podręcznej dysku przeglądarki i może zostać wczytana na długo przed zakończeniem okresu blokowania.
Optymalizacje wprowadziliśmy w Chrome 83, aby całkowicie usunąć pierwszy cykl renderowania w przypadku czcionek opcjonalnych
wstępnie wczytywanych za pomocą <link rel="preload'>.
Zamiast tego renderowanie jest blokowane do momentu, aż czcionka niestandardowa zostanie wczytana lub upłynie określony czas. Ten limit czasu jest obecnie ustawiony na 100 ms, ale w najbliższej przyszłości może się zmienić, aby zoptymalizować wydajność.
font-display: optional w Chrome, gdy czcionki są wstępnie wczytywane, a czcionka zostanie pobrana po 100-milisekundowym okresie blokowania (bez migania niewidocznego tekstu)
font-display: optional w Chrome, gdy czcionki są wstępnie wczytywane, a czcionka zostanie pobrana przed 100-milisekundowym okresie blokowania (bez migania niewidocznego tekstu)Wstępne wczytywanie czcionek opcjonalnych w Chrome eliminuje możliwość przesunięcia układu i migania tekstu bez stylu. Jest to zgodne z wymaganym działaniem określonym w module CSS Fonts Module Level 4, w którym czcionki opcjonalne nigdy nie powinny powodować ponownego ułożenia elementów, a agenci użytkownika mogą zamiast tego opóźnić renderowanie na odpowiedni czas.
Chociaż nie jest konieczne wstępne wczytywanie czcionki opcjonalnej, znacznie zwiększa to szansę na jej wczytanie przed pierwszym cyklem renderowania, zwłaszcza jeśli nie jest jeszcze przechowywana w pamięci podręcznej przeglądarki.
Podsumowanie
Zespół Chrome chętnie pozna Twoje opinie na temat wstępnego wczytywania czcionek opcjonalnych z tymi nowymi optymalizacjami. Jeśli napotkasz jakieś problemy lub chcesz zaproponować nowe funkcje, zgłoś problem.