PERFORMANCE DOCS
CORE-WEB-VITALS
Name
Description
Example
Output
Largest Contentful Paint (LCP)Description: Mengukur waktu yang dibutuhkan untuk merender konten terbesar yang terlihat di viewport. Target: < 2.5 detik.
Example:
Diukur menggunakan PerformanceObserver atau Lighthouse.
Output: Skor LCP dalam milidetik
Largest Contentful Paint (LCP)Mengukur waktu yang dibutuhkan untuk merender konten terbesar yang terlihat di viewport. Target: < 2.5 detik.
Diukur menggunakan PerformanceObserver atau Lighthouse.
Skor LCP dalam milidetik
Interaction to Next Paint (INP)Description: Mengukur latensi interaksi pengguna (klik, ketukan, keyboard) hingga frame berikutnya dilukis. Target: < 200ms.
Example:
Menggantikan First Input Delay (FID) pada Maret 2024.
Output: Latensi interaksi terburuk
Interaction to Next Paint (INP)Mengukur latensi interaksi pengguna (klik, ketukan, keyboard) hingga frame berikutnya dilukis. Target: < 200ms.
Menggantikan First Input Delay (FID) pada Maret 2024.
Latensi interaksi terburuk
Cumulative Layout Shift (CLS)Description: Mengukur stabilitas visual halaman, menghitung pergeseran tata letak yang tidak terduga. Target: < 0.1.
Example:
Hindari menyisipkan konten dinamis di atas konten yang sudah ada tanpa reservasi ruang.
Output: Skor CLS (skor numerik)
Cumulative Layout Shift (CLS)Mengukur stabilitas visual halaman, menghitung pergeseran tata letak yang tidak terduga. Target: < 0.1.
Hindari menyisipkan konten dinamis di atas konten yang sudah ada tanpa reservasi ruang.
Skor CLS (skor numerik)
First Contentful Paint (FCP)Description: Waktu hingga konten pertama (teks/gambar) dirender. Target: < 1.8 detik.
Example:
Optimalkan critical rendering path.
Output: Waktu FCP dalam milidetik
First Contentful Paint (FCP)Waktu hingga konten pertama (teks/gambar) dirender. Target: < 1.8 detik.
Optimalkan critical rendering path.
Waktu FCP dalam milidetik
Time to First Byte (TTFB)Description: Waktu dari permintaan hingga byte pertama diterima. Target: < 800ms.
Example:
Gunakan CDN, caching server, dan database yang efisien.
Output: TTFB dalam milidetik
Time to First Byte (TTFB)Waktu dari permintaan hingga byte pertama diterima. Target: < 800ms.
Gunakan CDN, caching server, dan database yang efisien.
TTFB dalam milidetik
RESOURCE-LOADING
Name
Description
Example
Output
PreloadDescription: Memprioritaskan pengambilan sumber daya yang penting untuk halaman saat ini.
Example:
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
Output: Sumber daya diambil lebih awal
PreloadMemprioritaskan pengambilan sumber daya yang penting untuk halaman saat ini.
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
Sumber daya diambil lebih awal
PrefetchDescription: Mengambil sumber daya untuk navigasi berikutnya di latar belakang.
Example:
<link rel="prefetch" href="/next-page.js">
Output: Cache untuk halaman berikutnya
PrefetchMengambil sumber daya untuk navigasi berikutnya di latar belakang.
<link rel="prefetch" href="/next-page.js">
Cache untuk halaman berikutnya
PreconnectDescription: Membangun koneksi ke asal sumber daya (DNS, TCP, TLS) lebih awal.
Example:
<link rel="preconnect" href="https://api.example.com">
Output: Koneksi awal siap
PreconnectMembangun koneksi ke asal sumber daya (DNS, TCP, TLS) lebih awal.
<link rel="preconnect" href="https://api.example.com">
Koneksi awal siap
DNS PrefetchDescription: Menyelesaikan nama domain menjadi alamat IP di latar belakang.
Example:
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
Output: Resolusi DNS lebih cepat
DNS PrefetchMenyelesaikan nama domain menjadi alamat IP di latar belakang.
<link rel="dns-prefetch" href="https://fonts.googleapis.com">
Resolusi DNS lebih cepat
Priority Hints (fetchpriority)Description: Memberi petunjuk prioritas pada sumber daya (high, low, auto).
Example:
<img src="hero.jpg" fetchpriority="high" alt="Hero">
Output: Gambar hero diprioritaskan
Priority Hints (fetchpriority)Memberi petunjuk prioritas pada sumber daya (high, low, auto).
<img src="hero.jpg" fetchpriority="high" alt="Hero">
Gambar hero diprioritaskan
CACHING-STRATEGIES
Name
Description
Example
Output
Cache-Control (HTTP Header)Description: Mengontrol caching browser. max-age untuk durasi, immutable untuk file statis.
Example:
Cache-Control: public, max-age=31536000, immutable
Output: File di-cache 1 tahun
Cache-Control (HTTP Header)Mengontrol caching browser. max-age untuk durasi, immutable untuk file statis.
Cache-Control: public, max-age=31536000, immutable
File di-cache 1 tahun
ETag / Last-ModifiedDescription: Validasi cache dengan token ETag atau waktu modifikasi terakhir.
Example:
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Output: 304 Not Modified jika cocok
ETag / Last-ModifiedValidasi cache dengan token ETag atau waktu modifikasi terakhir.
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
304 Not Modified jika cocok
Service Worker CachingDescription: Menggunakan service worker untuk caching offline-first dan strategi stale-while-revalidate.
Example:
self.addEventListener('fetch', event => { event.respondWith(caches.match(event.request).then(response => response || fetch(event.request))) })Output: Cache offline
Service Worker CachingMenggunakan service worker untuk caching offline-first dan strategi stale-while-revalidate.
self.addEventListener('fetch', event => { event.respondWith(caches.match(event.request).then(response => response || fetch(event.request))) })Cache offline
IMAGE-PERFORMANCE
Name
Description
Example
Output
next/image (Next.js)Description: Komponen yang secara otomatis mengoptimalkan gambar (resize, format modern, lazy loading).
Example:
import Image from 'next/image'
<Image src="/hero.jpg" width={800} height={600} alt="Hero" />Output: Gambar dalam format WebP/AVIF
next/image (Next.js)Komponen yang secara otomatis mengoptimalkan gambar (resize, format modern, lazy loading).
import Image from 'next/image'
<Image src="/hero.jpg" width={800} height={600} alt="Hero" />Gambar dalam format WebP/AVIF
loading="lazy"Description: Menunda pemuatan gambar hingga mendekati viewport.
Example:
<img src="image.jpg" loading="lazy" alt="..." />
Output: Gambar tidak dimuat sekaligus
loading="lazy"Menunda pemuatan gambar hingga mendekati viewport.
<img src="image.jpg" loading="lazy" alt="..." />
Gambar tidak dimuat sekaligus
srcset & sizesDescription: Menyediakan beberapa resolusi gambar untuk layar berbeda.
Example:
<img srcset="small.jpg 480w, large.jpg 1200w" sizes="(max-width: 600px) 480px, 1200px" src="default.jpg" alt="..." />
Output: Hanya gambar yang sesuai yang diunduh
srcset & sizesMenyediakan beberapa resolusi gambar untuk layar berbeda.
<img srcset="small.jpg 480w, large.jpg 1200w" sizes="(max-width: 600px) 480px, 1200px" src="default.jpg" alt="..." />
Hanya gambar yang sesuai yang diunduh
WebP / AVIFDescription: Format gambar modern dengan kompresi lebih baik dari JPEG/PNG.
Example:
<picture><source srcset="img.avif" type="image/avif"><img src="img.jpg" alt="..."></picture>
Output: Ukuran file lebih kecil
WebP / AVIFFormat gambar modern dengan kompresi lebih baik dari JPEG/PNG.
<picture><source srcset="img.avif" type="image/avif"><img src="img.jpg" alt="..."></picture>
Ukuran file lebih kecil
FONT-OPTIMIZATION
Name
Description
Example
Output
font-display: swapDescription: Menampilkan teks dengan font fallback sampai font kustom siap.
Example:
@font-face { font-family: 'MyFont'; src: url(...); font-display: swap; }Output: Teks terlihat lebih cepat
font-display: swapMenampilkan teks dengan font fallback sampai font kustom siap.
@font-face { font-family: 'MyFont'; src: url(...); font-display: swap; }Teks terlihat lebih cepat
Preload FontDescription: Mengambil font lebih awal agar siap saat dibutuhkan.
Example:
<link rel="preload" href="font.woff2" as="font" crossorigin>
Output: Font di-cache sebelum render
Preload FontMengambil font lebih awal agar siap saat dibutuhkan.
<link rel="preload" href="font.woff2" as="font" crossorigin>
Font di-cache sebelum render
Subset FontDescription: Mengurangi ukuran font dengan hanya menyertakan karakter yang diperlukan.
Example:
Gunakan layanan seperti Google Fonts dengan parameter text= atau subset manual.
Output: Font lebih kecil
Subset FontMengurangi ukuran font dengan hanya menyertakan karakter yang diperlukan.
Gunakan layanan seperti Google Fonts dengan parameter text= atau subset manual.
Font lebih kecil
next/font (Next.js)Description: Mengoptimalkan dan self-host font secara otomatis.
Example:
import { Inter } from 'next/font/google'
const inter = Inter({ subsets: ['latin'] })Output: Font dimuat optimal
next/font (Next.js)Mengoptimalkan dan self-host font secara otomatis.
import { Inter } from 'next/font/google'
const inter = Inter({ subsets: ['latin'] })Font dimuat optimal
JAVASCRIPT-PERFORMANCE
Name
Description
Example
Output
Code SplittingDescription: Memecah bundel JavaScript menjadi potongan yang lebih kecil sesuai rute.
Example:
const HeavyComponent = dynamic(() => import('./Heavy'))Output: Halaman awal lebih ringan
Code SplittingMemecah bundel JavaScript menjadi potongan yang lebih kecil sesuai rute.
const HeavyComponent = dynamic(() => import('./Heavy'))Halaman awal lebih ringan
Tree ShakingDescription: Menghapus kode yang tidak digunakan selama build.
Example:
Gunakan ES module import, pastikan library mendukung tree shaking.
Output: Bundel lebih kecil
Tree ShakingMenghapus kode yang tidak digunakan selama build.
Gunakan ES module import, pastikan library mendukung tree shaking.
Bundel lebih kecil
Defer / Async ScriptsDescription: Mengontrol eksekusi script agar tidak memblokir parsing.
Example:
<script src="script.js" defer></script>
Output: Script dieksekusi setelah HTML diparse
Defer / Async ScriptsMengontrol eksekusi script agar tidak memblokir parsing.
<script src="script.js" defer></script>
Script dieksekusi setelah HTML diparse
MemoizationDescription: Menggunakan useMemo / useCallback untuk mencegah komputasi berulang.
Example:
const value = useMemo(() => computeExpensive(a, b), [a, b])
Output: Tidak dihitung ulang jika dependensi sama
MemoizationMenggunakan useMemo / useCallback untuk mencegah komputasi berulang.
const value = useMemo(() => computeExpensive(a, b), [a, b])
Tidak dihitung ulang jika dependensi sama
PERFORMANCE-API
Name
Description
Example
Output
PerformanceObserverDescription: Mengamati metrik performa (LCP, FCP, CLS, long tasks) secara real-time.
Example:
const observer = new PerformanceObserver((list) => { ... })
observer.observe({ type: 'largest-contentful-paint', buffered: true })Output: Data metrik dikirim ke analytics
PerformanceObserverMengamati metrik performa (LCP, FCP, CLS, long tasks) secara real-time.
const observer = new PerformanceObserver((list) => { ... })
observer.observe({ type: 'largest-contentful-paint', buffered: true })Data metrik dikirim ke analytics
Navigation Timing APIDescription: Memberikan data waktu navigasi halaman (DNS, TLS, request, response).
Example:
const { domContentLoadedEventEnd, navigationStart } = performance.timingOutput: Durasi tiap fase navigasi
Navigation Timing APIMemberikan data waktu navigasi halaman (DNS, TLS, request, response).
const { domContentLoadedEventEnd, navigationStart } = performance.timingDurasi tiap fase navigasi
Resource Timing APIDescription: Mengukur performa pemuatan setiap sumber daya (gambar, script, CSS).
Example:
performance.getEntriesByType('resource')Output: Waktu muat setiap resource
Resource Timing APIMengukur performa pemuatan setiap sumber daya (gambar, script, CSS).
performance.getEntriesByType('resource')Waktu muat setiap resource
User Timing APIDescription: Membuat mark dan measure kustom untuk mengukur operasi spesifik.
Example:
performance.mark('start-task'); ... ; performance.measure('task-duration', 'start-task');Output: Durasi tugas kustom
User Timing APIMembuat mark dan measure kustom untuk mengukur operasi spesifik.
performance.mark('start-task'); ... ; performance.measure('task-duration', 'start-task');Durasi tugas kustom
Long Tasks APIDescription: Mendeteksi tugas yang memblokir main thread selama >50ms.
Example:
observer.observe({ type: 'longtask', buffered: true })Output: Identifikasi penyebab jank
Long Tasks APIMendeteksi tugas yang memblokir main thread selama >50ms.
observer.observe({ type: 'longtask', buffered: true })Identifikasi penyebab jank
TESTING-MONITORING
Name
Description
Example
Output
Lighthouse / PageSpeed InsightsDescription: Alat untuk mengaudit performa, aksesibilitas, SEO, dan best practices.
Example:
Jalankan dari Chrome DevTools atau https://pagespeed.web.dev
Output: Skor dan rekomendasi
Lighthouse / PageSpeed InsightsAlat untuk mengaudit performa, aksesibilitas, SEO, dan best practices.
Jalankan dari Chrome DevTools atau https://pagespeed.web.dev
Skor dan rekomendasi
Web Vitals ExtensionDescription: Ekstensi Chrome yang menampilkan Core Web Vitals secara real-time.
Example:
Instal ekstensi 'Web Vitals' dari Chrome Web Store.
Output: LCP, CLS, INP langsung terlihat
Web Vitals ExtensionEkstensi Chrome yang menampilkan Core Web Vitals secara real-time.
Instal ekstensi 'Web Vitals' dari Chrome Web Store.
LCP, CLS, INP langsung terlihat
Sentry / LogRocketDescription: Monitoring performa dan error di produksi.
Example:
Sentry.init({ dsn: '...', integrations: [new BrowserTracing()] })Output: Data performa pengguna nyata
Sentry / LogRocketMonitoring performa dan error di produksi.
Sentry.init({ dsn: '...', integrations: [new BrowserTracing()] })Data performa pengguna nyata
BEST-PRACTICES
Name
Description
Example
Output
Minifikasi & KompresiDescription: Minify HTML, CSS, JS dan gunakan kompresi Brotli/Gzip.
Example:
Build tools (Webpack, Vite) dan konfigurasi server.
Output: Ukuran transfer lebih kecil
Minifikasi & KompresiMinify HTML, CSS, JS dan gunakan kompresi Brotli/Gzip.
Build tools (Webpack, Vite) dan konfigurasi server.
Ukuran transfer lebih kecil
Hindari Flash of Invisible Text (FOIT)Description: Gunakan font-display: swap atau preload untuk font kustom.
Example:
@font-face { font-display: swap; }Output: Teks selalu terlihat
Hindari Flash of Invisible Text (FOIT)Gunakan font-display: swap atau preload untuk font kustom.
@font-face { font-display: swap; }Teks selalu terlihat
Gunakan HTTP/2 atau HTTP/3Description: Memungkinkan multiplexing dan header compression untuk loading lebih cepat.
Example:
Aktifkan di server atau melalui CDN.
Output: Banyak request sekaligus tanpa antrean
Gunakan HTTP/2 atau HTTP/3Memungkinkan multiplexing dan header compression untuk loading lebih cepat.
Aktifkan di server atau melalui CDN.
Banyak request sekaligus tanpa antrean
Kurangi Waktu Respon Server (TTFB)Description: Gunakan edge function, CDN, dan database query yang efisien.
Example:
Next.js ISR, Vercel Edge Functions.
Output: TTFB < 800ms
Kurangi Waktu Respon Server (TTFB)Gunakan edge function, CDN, dan database query yang efisien.
Next.js ISR, Vercel Edge Functions.
TTFB < 800ms