Wstępne wczytywanie zasobów za pomocą <link rel="preload"> sygnalizuje przeglądarce, że zasób będzie wkrótce potrzebny. Jednak wstępne wczytywanie dziedziczy domyślny priorytet dla typu zasobu, a w przypadku obrazów jest on niski. Użycie fetchpriority pozwala doprecyzować ten względny priorytet, w szczególności zapewniając, że wstępne wczytywanie obrazów odbywa się z wysokim priorytetem, co pozwala na wcześniejsze rozpoczęcie i wykorzystanie większej ilości zasobów przepustowości.
Jak to zrobić?
- Identyfikowanie kandydatów do wstępnego wczytywania: znajdź zasoby, które nie są wykrywane na wczesnym etapie przez przeglądarkę (np. obrazy plakatu filmu lub obrazy tła w CSS), ale są niezbędne do wyświetlania strony.
- Zwiększ priorytet wstępnego wczytywania kluczowych obrazów: w przypadku obrazu LCP lub innych kluczowych obrazów, które nie są domyślnie traktowane priorytetowo, użyj
<link rel="preload" fetchpriority="high">, aby zapewnić im wyższy priorytet niż innym wstępnie wczytywanym elementom. Pamiętaj, że czcionki mają już domyślnie wysoki priorytet. - Obniż priorytet mniej istotnych zasobów wstępnie wczytywanych: w przypadku zasobów, które nie są kluczowe dla początkowego renderowania (np. film w tle lub czcionki dodatkowe), użyj
<link rel="preload" fetchpriority="low">. - Koordynacja z typami zasobów: pamiętaj, że różne typy
asmają różne priorytety domyślne. W razie potrzeby użyjfetchpriority, aby zastąpić te wartości domyślne.
Przykładowy kod
<!-- Elevate priority for a video poster image that acts as the LCP candidate -->
<link rel="preload" href="/images/video-poster.jpg" as="image" fetchpriority="high">
<!-- Elevate priority for a critical LCP image that is hidden in CSS -->
<link rel="preload" href="/images/hero-background.jpg" as="image" fetchpriority="high">
<!-- Deprioritize a secondary font to avoid network contention -->
<link rel="preload" href="/fonts/secondary-font.woff2" as="font" type="font/woff2" fetchpriority="low" crossorigin>
Sprawdzone metody
- OBOWIĄZKOWE: używaj
fetchpriority="high"tylko w przypadku maksymalnie 1–2 krytycznych wstępnie wczytywanych obrazów, aby uniknąć przeciążenia sieci i osłabienia priorytetu. - OBOWIĄZKOWO: używaj
fetchpriority="high"w przypadku obrazów o największym wyrenderowaniu treści (LCP). - DO: ogranicz łączną liczbę wstępnie wczytywanych elementów na stronie do maksymalnie 2 obrazów i 2–3 podstawowych czcionek, aby zapobiec przeciążeniu przepustowości.
- UŻYWAJ
fetchpriority="low"do wstępnego wczytywania zasobów, które przeglądarka ma zacząć wczytywać wcześniej, ale nie kosztem zasobów krytycznych (zwłaszcza niekrytycznych czcionek). - PRAWIDŁOWO określ atrybut
as, aby mieć pewność, że wstępne wczytywanie zostanie użyte. - ZALECENIE: preferuj statyczne wykrywanie zasobów krytycznych (takich jak obrazy LCP) w kodzie HTML za pomocą tagów
<img>zamiast polegania na wstępnym wczytywaniu obrazów tła. - DO ensure that font preloads always have the
crossoriginattribute (even if same-origin). - NIE używaj wycofanego atrybutu
importance. Został on zastąpiony przezfetchpriority.
Strategia zastępcza
Atrybut fetchpriority w elemencie <link rel="preload"> to progresywne ulepszanie. Przeglądarki, które nie obsługują tej funkcji, będą nadal wstępnie wczytywać zasób, używając domyślnego priorytetu dla tego typu zasobu. Aby zapewnić zgodność, zawsze podawaj prawidłowe atrybuty as i type.