Performance budget adalah batas maksimum yang kamu tetapkan sendiri untuk performance halaman, dan gak boleh dilampaui: misalnya "total JavaScript maksimal 300 KB" atau "LCP maksimal 2,5 detik". Mirip uang jajan bulanan. Kalau jatahnya Rp500.000 sebulan, tiap mau beli sesuatu kamu cek dulu masih cukup atau gak. Tanpa batas itu, jajan kecil-kecil menumpuk dan akhir bulan uangnya tiba-tiba habis. Halaman web juga begitu: tiap fitur menambah sedikit, lama-lama halamannya berat.
🧪 Tebakan cepat: budget JavaScript 300 KB, dan batas satu file juga 300 KB. Halamanmu punya
app.js200 KB danvendor.js250 KB. Dua-duanya di bawah 300 KB. Lolos atau gak? Jawabannya ada di bagian "Cek budget pakai kode".
Jenis budget
- Ukuran dan jumlah: total JavaScript maksimal 300 KB, total gambar maksimal 500 KB, maksimal 50 request per halaman.
- Waktu: LCP maksimal 2,5 detik, INP maksimal 200 ms.
- Skor: skor Performance di Lighthouse minimal 90.
Budget ukuran paling gampang dicek, karena ukuran tiap file langsung kelihatan setiap kali proyeknya di-build. Build adalah proses mengubah kode sumbermu jadi file siap kirim (bundle).
Menentukan angkanya
- Dari kondisi sekarang. Ukur halamanmu, pasang batas di sekitar angka itu supaya gak memburuk, lalu turunkan pelan-pelan.
- Dari target. Mulai dari Core Web Vitals yang good, lalu tentukan berapa banyak file yang muat. Untuk JavaScript, patokan awal yang sering dipakai: total sekitar 200 KB setelah dikompres (gzip) untuk satu halaman.
Kenapa JavaScript dijaga ketat? JavaScript gak cuma di-download. Browser masih harus membaca (parse), meng-compile, lalu menjalankannya, dan di HP murah semua itu lambat. Gambar 200 KB dan JavaScript 200 KB sama besarnya, tapi JavaScript jauh lebih mahal.
Cek budget pakai kode
Budget di latihan, semuanya dalam KB:
const budget = { maxTotalJS: 300, maxTotalCSS: 100, maxTotalImage: 500, maxSingleAsset: 300 };
const assets = [
{ name: "app.js", sizeKB: 200, type: "js" },
{ name: "vendor.js", sizeKB: 250, type: "js" },
{ name: "style.css", sizeKB: 50, type: "css" },
];
Ada dua jenis cek: total per jenis file, dan batas untuk satu file (maxSingleAsset). Tiap pelanggaran jadi satu kalimat, dan kalau gak ada pelanggaran sama sekali, budget-nya lolos:
function checkBudget(assets, budget) {
const violations = [];
const totals = { js: 0, css: 0, image: 0 };
for (const asset of assets) {
if (asset.type in totals) totals[asset.type] += asset.sizeKB; // font gak punya batas total
}
if (totals.js > budget.maxTotalJS) {
violations.push(`JS total ${totals.js}KB exceeds ${budget.maxTotalJS}KB limit`);
}
if (totals.css > budget.maxTotalCSS) {
violations.push(`CSS total ${totals.css}KB exceeds ${budget.maxTotalCSS}KB limit`);
}
if (totals.image > budget.maxTotalImage) {
violations.push(`Image total ${totals.image}KB exceeds ${budget.maxTotalImage}KB limit`);
}
for (const asset of assets) {
if (asset.sizeKB > budget.maxSingleAsset) {
violations.push(`${asset.name} (${asset.sizeKB}KB) exceeds ${budget.maxSingleAsset}KB single asset limit`);
}
}
return { passed: violations.length === 0, violations };
}
console.log(checkBudget(assets, budget));
// { passed: false, violations: ["JS total 450KB exceeds 300KB limit"] }
| Cek | Hitungan | Hasil |
|---|---|---|
| Total JS | 200 + 250 = 450, lebih dari 300 | melanggar |
| Total CSS | 50, gak lebih dari 100 | aman |
| Total gambar | 0, gak lebih dari 500 | aman |
| Tiap file, lebih dari 300? | 200, 250, 50 | aman |
Itu jawaban tebakannya: gak lolos. Tiap file memang di bawah 300 KB, tapi total JavaScript-nya 450 KB.
totalsmenjumlahkansizeKBper type. Asset bertipe"font"dilewati, karena budget-nya gak punya batas total font.- "Exceeds" artinya lebih dari (
>). Total yang tepat 300 KB masih lolos. - Urutan pesannya: total JS, total CSS, total Image, baru tiap file sesuai urutan di array. Satu file
chart.js350 KB menghasilkan dua pesan:"JS total 350KB exceeds 300KB limit"lalu"chart.js (350KB) exceeds 300KB single asset limit". KBditulis nempel ke angkanya, tanpa spasi. Kalimatnya harus persis.
Pasang di build
Budget cuma berguna kalau dicek otomatis. Caranya, jalankan cek seperti di atas setiap kali proyek di-build, misalnya di CI (continuous integration, server yang menjalankan build dan tes untuk tiap perubahan). Kalau budget-nya jebol, build dibuat gagal:
const hasil = checkBudget(assets, budget);
if (!hasil.passed) {
console.error(hasil.violations.join("\n"));
process.exit(1); // kode keluar selain 0: CI menganggap build-nya gagal
}
Perubahan yang bikin halaman lebih berat langsung ketahuan sebelum sampai ke pengguna. Alat seperti Lighthouse CI dan size-limit melakukan hal yang sama tanpa kamu tulis sendiri.
⚠️ Jebakan yang sering ketemu
- Cuma mengecek per file. Dua file 200 KB dan 250 KB masing-masing aman, tapi totalnya 450 KB.
- Lupa batas satu file berlaku untuk semua type. Gambar atau font 400 KB juga melanggar
maxSingleAsset. - Pesan yang gak persis. Spasi di "450 KB", huruf besar di "Exceeds", atau urutan yang tertukar bikin hasilnya beda dari yang diharapkan.
- Pakai
>=. Budget 300 KB artinya 300 KB masih boleh. Yang melanggar baru 301 KB ke atas. - Budget tanpa cek otomatis. Kalau gak ada yang menjalankan ceknya, budget cuma jadi angka di dokumen.
TL;DR: Performance budget adalah batas maksimum ukuran file, waktu, atau skor yang gak boleh dilampaui, supaya halaman gak melambat pelan-pelan. Patokan awal yang sering dipakai untuk JavaScript: sekitar 200 KB setelah gzip. Cek dua hal: total per type (JS, CSS, gambar) dan ukuran tiap file, pakai >. Tulis pelanggarannya persis, total dulu baru per file: "JS total 450KB exceeds 300KB limit" dan "chart.js (350KB) exceeds 300KB single asset limit", lalu passed bernilai true kalau violations kosong. Jalankan ceknya di build, supaya budget yang jebol bikin build gagal.