First Contentful Paint (FCP)

Dukungan Browser

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

Sumber

First Contentful Paint (FCP) mengukur waktu dari saat pengguna pertama kali membuka halaman hingga bagian mana pun dari konten halaman dirender di layar. Untuk metrik ini, "konten" mengacu pada teks, gambar (termasuk gambar latar), elemen <svg>, atau elemen <canvas> non-putih.

Linimasa FCP dari google.com
Dalam linimasa pemuatan ini, FCP terjadi pada frame kedua, karena saat itulah elemen teks dan gambar pertama dirender ke layar.

Dalam linimasa pemuatan yang digambarkan pada gambar sebelumnya, FCP terjadi pada frame kedua, karena saat itulah elemen teks dan gambar pertama dirender ke layar.

Anda akan melihat bahwa meskipun sebagian konten telah dirender, tidak semuanya telah dirender. Perbedaan ini penting untuk dibuat antara First Contentful Paint dan Largest Contentful Paint (LCP)—yang bertujuan untuk mengukur kapan konten utama halaman selesai dimuat.

Berapa skor FCP yang baik?

Untuk memberikan pengalaman pengguna yang baik, situs harus mengusahakan agar First Contentful Paint-nya 1,8 detik atau kurang. Untuk memastikan Anda mencapai target ini bagi sebagian besar pengguna, nilai minimum yang baik untuk diukur adalah persentil ke-75 pemuatan halaman, yang disegmentasikan di seluruh perangkat seluler dan desktop.

Nilai FCP yang baik adalah 1,8 detik atau kurang, nilai yang buruk adalah lebih dari 3,0 detik, dan nilai di antara keduanya perlu ditingkatkan
Nilai FCP yang baik adalah 1,8 detik atau kurang. Nilai buruk lebih besar dari 3,0 detik

Cara mengukur FCP

FCP dapat diukur di lab atau di lapangan, dan tersedia di alat berikut:

Alat kolom

Alat lab

Mengukur FCP di JavaScript

Untuk mengukur FCP di JavaScript, Anda dapat menggunakan Paint Timing API. Contoh berikut menunjukkan cara membuat PerformanceObserver yang memproses entri paint dengan nama first-contentful-paint dan mencatatnya ke konsol.

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

Dalam cuplikan kode sebelumnya, entri first-contentful-paint yang dicatat akan memberi tahu Anda kapan elemen konten pertama digambar. Namun, dalam beberapa kasus, entri ini tidak valid untuk mengukur FCP.

Bagian berikut mencantumkan perbedaan antara laporan API dan cara penghitungan metrik.

Perbedaan antara metrik dan API

  • API akan mengirimkan entri first-contentful-paint untuk halaman yang dimuat di tab latar belakang, tetapi halaman tersebut harus diabaikan saat menghitung FCP (waktu cat pertama hanya boleh dipertimbangkan jika halaman berada di latar depan sepanjang waktu).
  • API tidak melaporkan entri first-contentful-paint saat halaman dipulihkan dari cache kembali/maju, tetapi FCP harus diukur dalam kasus ini karena pengguna mengalaminya sebagai kunjungan halaman yang berbeda.
  • API mungkin tidak melaporkan waktu render dari iframe lintas origin, tetapi untuk mengukur FCP dengan benar, Anda harus mempertimbangkan semua frame. Sub-frame dapat menggunakan API untuk melaporkan pengaturan waktu gambarnya ke frame induk untuk agregasi.
  • API mengukur FCP dari awal navigasi, tetapi untuk halaman yang dipra-render, FCP harus diukur dari activationStart karena sesuai dengan waktu FCP yang dialami pengguna.

Daripada menghafal semua perbedaan kecil ini, developer dapat menggunakan library JavaScript web-vitals untuk mengukur FCP, yang menangani perbedaan ini untuk Anda (jika memungkinkan—perhatikan bahwa masalah iframe tidak tercakup):

import {onFCP} from 'web-vitals';

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

Anda dapat melihat kode sumber untuk onFCP() untuk mengetahui contoh lengkap cara mengukur FCP di JavaScript.

Cara meningkatkan FCP

Untuk mempelajari cara meningkatkan FCP untuk situs tertentu, Anda dapat menjalankan audit performa Lighthouse dan memperhatikan peluang atau diagnostik spesifik yang disarankan audit.

Untuk mempelajari cara meningkatkan FCP secara umum (untuk situs mana pun), lihat panduan performa berikut:

Log perubahan

Terkadang, bug ditemukan di API yang digunakan untuk mengukur metrik, dan terkadang di definisi metrik itu sendiri. Oleh karena itu, terkadang perubahan harus dilakukan, dan perubahan ini dapat muncul sebagai peningkatan atau regresi dalam laporan dan dasbor internal Anda.

Untuk membantu Anda mengelolanya, semua perubahan pada penerapan atau definisi metrik ini akan ditampilkan di Log Perubahan ini.

Jika memiliki masukan untuk metrik ini, Anda dapat memberikannya di grup Google web-vitals-feedback.