Episode ini membahas optimasi performa Gatsby: analisis ukuran bundle dan kecepatan halaman, preloading dan code splitting, lazy loading dengan loadable-components, serta peningkatan Core Web Vitals dan skor Lighthouse.

Gatsby sudah cepat secara bawaan, tapi "sudah cepat" bukan alasan untuk berhenti. Optimasi performa adalah proses berkelanjutan: mengukur, menemukan bottleneck, lalu memperbaiki satu per satu.
Episode 15 membahas analisis bundle dan kecepatan halaman, preloading dan code splitting, lazy loading, plugin optimasi build, serta perbaikan Core Web Vitals dan skor Lighthouse.
Lighthouse adalah alat audit bawaan Chrome yang memberi skor performa, aksesibilitas, dan SEO. Jalankan pada production build lokal:
npm run build
npx lighthouse http://localhost:9000 --only-categories=performancePerintah npx lighthouse memerlukan server berjalan; gunakan gatsby serve yang mendengarkan di port 9000 setelah build selesai.
Bundle JavaScript yang besar memperlambat waktu interaksi. Analisis kontribusi tiap paket dengan bundle analyzer. Hasilnya menampilkan peta ukuran per dependency sehingga kalian tahu paket mana yang sebaiknya di-lazy-load.
Halaman yang kaya media bisa di-preload: font, gambar hero, dan script kritikal ditandai agar browser memuatnya lebih awal. Gatsby Head API bisa merender link preload untuk aset kunci.
Komponen berat — chart, editor, widget besar — sebaiknya dimuat hanya saat dibutuhkan. Gunakan @loadable/component:
npm install @loadable/component gatsby-plugin-loadable-componentsLalu lazy-load komponen di file:
import loadable from "@loadable/component"
const ChartWidget = loadable(() => import("../components/ChartWidget"))
const Dashboard = () => (
<section>
<ChartWidget />
</section>
)loadable(() => import(...)) memecah ChartWidget menjadi bundle terpisah yang hanya dimuat saat komponen dirender. Ini mengurangi JavaScript awal yang harus diunduh.
Gatsby sudah memecah kode per halaman secara otomatis. Tugas kalian adalah memastikan komponen berat tidak ter-import statis di halaman utama, melainkan lewat lazy loading.
gatsby-plugin-perf-budgets memicu kegagalan build jika bundle melebihi batas yang ditentukan:
module.exports = {
plugins: [
{
resolve: "gatsby-plugin-perf-budgets",
options: {
budgets: [
{
path: "/",
size: 250,
gzip: true,
},
],
},
},
],
}Opsi size: 250 berarti JavaScript halaman utama tidak boleh melebihi 250KB (tergantung unit konfigurasi plugin). Budget menjadikan performa sebagai kontrak, bukan sekadar niat baik.
Pastikan semua gambar memakai gatsby-plugin-image (episode 6) sehingga format dan ukuran otomatis optimal. Untuk font, hindari memuat beberapa weight sekaligus; gunakan subset dan font-display: swap agar teks tidak invisible saat font dimuat.
LCP membaik dengan gambar yang dioptimasi dan preloading. INP membaik dengan JavaScript yang lebih kecil dan lazy loading. CLS membaik dengan memberikan ukuran eksplisit pada gambar dan media, serta aspect-ratio CSS. Ulangi audit setelah setiap perubahan besar untuk memastikan tidak ada regresi.
Inti yang harus dibawa pulang:
gatsby serve di port 9000 untuk menguji production build lokal.@loadable/component.gatsby-plugin-perf-budgets mengikat performa sebagai kontrak build.Di episode 16 selanjutnya kita akan membahas testing dan quality — unit testing dengan Jest dan React Testing Library, integration testing untuk halaman Gatsby, pengujian aksesibilitas dan SEO audit, serta static analysis dengan ESLint.