First Contentful Paint (FCP)

Obsługa przeglądarek

  • Chrome: 60.
  • Edge: 79.
  • Firefox: 84.
  • Safari: 14.1.

Źródło

Pierwsze wyrenderowanie treści (FCP) mierzy czas od momentu, gdy użytkownik po raz pierwszy otworzył stronę, do momentu, gdy dowolna część treści strony została wyrenderowana na ekranie. W przypadku tej metryki „treści” to tekst, obrazy (w tym obrazy tła), elementy <svg> lub elementy <canvas>, które nie są białe.

Oś czasu FCP na stronie google.com
Na tej osi czasu wczytywania FCP występuje w drugiej klatce, ponieważ to właśnie wtedy na ekranie pojawiają się pierwsze elementy tekstowe i obrazowe.

Na osi czasu wczytywania na poprzednim obrazie FCP występuje w drugiej klatce, ponieważ to wtedy na ekranie pojawiają się pierwsze elementy tekstu i obrazu.

Zauważysz, że niektóre treści zostały wyrenderowane, ale nie wszystkie. Ważne jest rozróżnianie między pierwszym wyrenderowaniem treści a największym wyrenderowaniem treści (LCP), które ma na celu zmierzenie, kiedy zakończyło się wczytywanie głównej zawartości strony.

Jaki jest dobry wynik FCP?

Aby zapewnić użytkownikom wygodę, witryny powinny mieć czas First Contentful Paint wynoszący 1,8 sekund lub mniej. Aby mieć pewność, że osiągasz ten cel w przypadku większości użytkowników, warto mierzyć 50. percentyl wczytywania stron podzielony na urządzenia mobilne i komputery.

Dobre wartości FCP wynoszą 1,8 sekundy lub mniej, złe wartości wynoszą ponad 3 sekundy, a wartości pośrednie wymagają poprawy
Dobre wartości FCP wynoszą 1,8 sekundy lub mniej. Wartości poniżej 3,0 s są oceniane jako dobre.

Jak mierzyć FCP

Wartość FCP można mierzyć w laboratorium lub w polu. Jest ona dostępna w tych narzędziach:

Narzędzia w polu

Narzędzia laboratoryjne

Pomiar FCP w JavaScript

Aby mierzyć FCP w JavaScript, możesz użyć interfejsu Paint Timing API. Ten przykład pokazuje, jak utworzyć element PerformanceObserver, który nasłuchuje wpisu paint o nazwie first-contentful-paint i rejestruje go w konsoli.

new PerformanceObserver((entryList) => {
  for (const entry of entryList.getEntriesByName('first-contentful-paint')) {
    console.log('FCP candidate:', entry.startTime, entry);
  }
}).observe({type: 'paint', buffered: true});

W poprzednim fragmencie kodu zarejestrowany wpis first-contentful-paint informuje, kiedy został wyrenderowany pierwszy element z treścią. W niektórych przypadkach ten wpis nie jest jednak odpowiedni do pomiaru FCP.

W następującej sekcji opisano różnice między tym, co raportuje interfejs API, a sposobem obliczania danych.

Różnice między danymi a interfejsem API

  • Interfejs API wyśle wpis first-contentful-paint w przypadku stron wczytanych na karcie w tle, ale te strony powinny być ignorowane podczas obliczania FCP (czasy pierwszego wyrenderowania powinny być brane pod uwagę tylko wtedy, gdy strona była na pierwszym planie przez cały czas).
  • Interfejs API nie przekazuje rekordów first-contentful-paint, gdy strona jest przywracana z pamięci podręcznej stanu strony internetowej, ale w takich przypadkach należy mierzyć FCP, ponieważ użytkownicy postrzegają te zdarzenia jako oddzielne wizyty na stronie.
  • Interfejs API może nie raportować czasów renderowania z elementów iframe z innych domen, ale aby prawidłowo mierzyć FCP, należy wziąć pod uwagę wszystkie klatki. Podramki mogą używać interfejsu API do raportowania czasu renderowania do ramki nadrzędnej na potrzeby agregacji.
  • Interfejs API mierzy FCP od momentu rozpoczęcia nawigacji, ale w przypadku stron z zabezpieczonym wyrenderowaniem czas ten powinien być mierzony od activationStart, ponieważ odpowiada on temu, jak długo użytkownik musi czekać na FCP.

Zamiast zapamiętywać te subtelne różnice, programiści mogą używać biblioteki JavaScript web-vitals do pomiaru FCP, która załatwia te różnice (w miarę możliwości – zwróć uwagę, że problem z iframe nie jest uwzględniany):

import {onFCP} from 'web-vitals';

// Measure and log FCP as soon as it's available.
onFCP(console.log);

Pełny przykład pomiaru FCP w JavaScript znajdziesz w źródłowym kodzie onFCP().

Jak poprawić FCP

Aby dowiedzieć się, jak poprawić FCP w konkretnej witrynie, możesz przeprowadzić audyt wydajności Lighthouse i zwrócić uwagę na konkretne możliwości lub diagnozy sugerowane przez audyt.

Aby dowiedzieć się, jak ogólnie poprawić FCP (w przypadku dowolnej witryny), zapoznaj się z tymi przewodnikami dotyczącymi wydajności:

Historia zmian

Czasami w interfejsach API służących do pomiaru danych i czasami w definicjach samych danych występują błędy. W związku z tym czasami trzeba wprowadzić zmiany, które mogą się pojawiać w raportach i panelach wewnętrznych jako ulepszenia lub regresje.

Aby ułatwić Ci zarządzanie tymi danymi, wszystkie zmiany w ich implementacji lub definicji będą widoczne w Historii zmian.

Jeśli masz opinię na temat tych danych, możesz ją przekazać w grupie Google nt. opinii na temat funkcji web-vitals.