Dev wajib tahu! Bikin web kita enteng dengan optimasi bundle size.

Dev wajib tahu! Bikin web kita enteng dengan optimasi bundle size.
Photo by Shubham Dhage/Unsplash

Bro dan sis dev lagi pusing karena website kita loadingnya berat banget atau nilai Lighthouse kok merah terus Fix ini artikel buat kita semua. Siapa sih yang ga mau website bikinan kita itu ngebut kaya jet Responsif banget diakses dari mana aja dan pastinya bikin user betah Udah saatnya kita ngulik lebih dalam soal optimasi bundle size biarin web kita enteng seringan kapas.

Kadang kita suka lupa bahwa tiap baris kode yang kita tulis tiap library yang kita install itu punya beban tersendiri. Semakin banyak kodenya makin gede juga ukuran bundle website kita. Nah kalo bundle kita kegedean loading website jadi lemot user pun males nungguin terus cabut dari web kita. Ini ga cuma bikin user experience amburadul tapi juga bisa ngaruh ke ranking SEO kita lho. Google itu suka banget sama website yang cepat dan punya performa bagus jadi optimasi bundle size ini jadi kunci penting banget yang wajib kita kuasai.

Kenapa Bundle Size Itu Penting Banget

Begini deh coba kita bayangin kita lagi mau buka sebuah website. Kita nunggu lima detik sepuluh detik kok belum muncul juga Pasti langsung kita tutup kan Nah itu dia. User sekarang punya ekspektasi tinggi terhadap kecepatan. Web yang lambat itu seperti jembatan rusak ngalangin user buat mencapai tujuan mereka di web kita.

Dari sisi teknis bundle size yang besar itu artinya browser harus download lebih banyak data. Ini ngabisin bandwidth user terutama mereka yang pake koneksi internet lambat atau paket data terbatas. Proses parsing dan eksekusi JavaScript yang gede juga butuh waktu dan sumber daya dari CPU perangkat user yang ujungnya bikin loading jadi makin lama. Metrics penting kayak Largest Contentful Paint LCP First Input Delay FID dan Cumulative Layout Shift CLS semuanya bisa kena dampak buruk dari bundle size yang kegedean. Kalo nilai metrics ini jelek udah pasti skor Lighthouse kita juga anjlok dan ranking SEO bisa ikut ketarik turun. Jadi optimasi bundle size ini bukan cuma soal kode tapi juga soal bisnis dan kepuasan user. Ini bener bener investasi yang nguntungin banget buat project project kita.

Menganalisa Ukuran Bundle Kita Awalnya Gimana

Sebelum kita nyerang buat optimasi penting banget buat tahu dulu kondisi bundle kita sekarang seperti apa. Kita harus tahu biang keladi apa saja yang bikin bundle kita jadi gemuk. Ada beberapa tools yang bisa kita andalkan buat ngecek ini.

Pertama ada Webpack Bundle Analyzer. Ini tool asik banget buat kita yang pake Webpack. Dia bakal nampilin visualisasi interaktif dari semua module yang ada di bundle kita. Kita bisa lihat module mana yang paling gede ukurannya library apa yang makan tempat paling banyak dan dependensi apa aja yang ikutan kebawa. Dengan visualisasi berupa treemap yang warna warni kita bisa langsung nunjuk oh ini nih yang bikin bundle kita bengkak.

Kedua kita bisa pake Lighthouse yang ada di Chrome DevTools atau Google PageSpeed Insights. Tools ini ngasih kita laporan performa web yang komprehensif termasuk informasi tentang ukuran JavaScript yang kita kirim ke browser. Mereka juga ngasih rekomendasi spesifik tentang gimana kita bisa memperbaikinya. Ini penting banget buat ngelihat gimana performa web kita secara keseluruhan bukan cuma bundle size tapi juga aspek lain seperti accessibility dan SEO.

Setelah kita punya gambaran jelas tentang kondisi bundle kita baru deh kita bisa mulai melancarkan strategi optimasi.

Strategi Optimasi Bundle Size Bikin Web Kita Enteng

Ada banyak cara yang bisa kita lakukan buat bikin bundle web kita jadi lebih ramping. Kita akan bahas satu per satu biar kita paham dan bisa langsung implementasiin.

1 Code Splitting Teknik Memecah Belah Kode

Code splitting ini ibaratnya kita punya satu buku tebal banget. Daripada kita suruh orang baca semua dari awal sampai akhir mending kita kasih bagian yang relevan aja kan. Nah gitu juga dengan kode kita. Daripada semua kode JavaScript dikirim dalam satu file gede di awal pas loading mending kita pecah pecah jadi bagian yang lebih kecil.

Ide utama dari code splitting ini adalah cuma load kode yang dibutuhkan pada saat itu. Misalnya kalo kita punya website dengan banyak halaman atau fitur yang beda beda kita bisa pisahin kode buat tiap halaman atau fitur tersebut. Jadi pas user buka halaman A dia cuma download kode buat halaman A aja ga perlu kode buat halaman B C atau D.

Cara implementasinya di JavaScript modern kita bisa pake fitur dynamic import(). Contoh paling umum adalah di aplikasi React atau Vue kita bisa pake React.lazy dan Suspense atau dynamic import di Vue Router. Misalnya buat sebuah komponen yang cuma muncul pas user klik tombol atau buat halaman login yang ga selalu diakses.

javascript
// Contoh dynamic import di React
import React, { Suspense, lazy } from 'react';const LazyComponent = lazy(() => import('./MyHeavyComponent'));function App() {
  return (
    
      Aplikasi Utama
      Loading komponen...}>
        
      
    
  );
}

Dengan code splitting kita bisa mengurangi initial load time secara signifikan karena browser hanya perlu download kode yang esensial di awal. Kode yang lain bakal di download secara asynchronous saat user bener bener membutuhkannya. Ini asik banget buat user experience dan performa.

2 Tree Shaking Buang Sampah Kode Yang Gak Dipakai

Pernah dengar istilah dead code eliminations Nah tree shaking itu mirip kayak gitu. Ibaratnya kita punya pohon tapi ada beberapa ranting yang udah mati atau ga ngasih buah. Daripada bikin pohonnya berat mending kita pangkas kan. Tree shaking ini teknik buat ngebuang kode kode yang ga kepake dari bundle JavaScript kita.

Seringkali kita install library atau package yang gede tapi kita cuma pake sedikit fungsinya. Misalnya kita install lodash satu library utility yang komplit banget tapi kita cuma butuh _.debounce doang. Kalo kita ga pake tree shaking seluruh lodash bisa ikut kebawa ke bundle kita padahal mayoritas kodenya ga kepake.

Bundler modern kayak Webpack atau Rollup itu punya kemampuan buat ngelakuin tree shaking. Syaratnya kode kita harus ditulis dalam format ES Modules atau ES6 modules. Karena ES Modules itu sifatnya static mereka bisa dengan mudah dianalisa oleh bundler buat nentuin bagian mana yang bener bener diimpor dan bagian mana yang bisa dibuang.

Jadi pastikan kita selalu pake import dan export standar ES Modules di project kita. Kalo kita pake library yang masih CommonJS require() tree shaking ga akan berjalan maksimal. Kadang kita juga bisa import spesifik fungsi dari library tertentu seperti import { debounce } from 'lodash-es'; daripada import _ from 'lodash'; buat hasil tree shaking yang lebih optimal. Ini langkah sederhana tapi efeknya lumayan gede lho.

3 Lazy Loading Memuat Sumber Daya Sesuai Kebutuhan

Lazy loading sering disandingkan dengan code splitting tapi mereka punya fokus yang sedikit beda. Kalo code splitting itu teknik buat memecah bundle jadi bagian kecil lazy loading itu strateginya buat memutuskan KAPAN kita akan memuat bagian kode atau sumber daya tertentu.

Bayangkan kita punya banyak gambar di halaman web kita. Kalo semua gambar itu dimuat barengan pas halaman dibuka pasti berat banget kan apalagi kalo gambarnya banyak. Dengan lazy loading gambar yang ada di bawah atau di luar viewport user saat ini itu ga akan dimuat sampai user scroll ke area tersebut.

Selain gambar lazy loading juga bisa kita terapkan buat komponen React atau Vue yang cuma muncul di kondisi tertentu seperti modal tab content atau widget chat. Contoh sederhana di HTML kita bisa pake atribut loading="lazy" pada tag

atau </code>.</p><pre><code>html <img src="gambar_berat.jpg" alt="Contoh Gambar" loading="lazy"></code></pre><p>Buat komponen JavaScript seperti yang sudah kita bahas di bagian code splitting <code>React.lazy</code> dan dynamic <code>import()</code> juga sering digunakan sebagai bagian dari strategi lazy loading. Jadi intinya jangan muat sesuatu yang belum tentu user butuhin saat ini. Biarin itu dimuat nanti kalo user udah nyampe ke sana. Ini bikin initial load kita jadi super enteng.</p><h4>4 Minifikasi dan Kompresi Bikin Kode Kecil dan Padat</h4><p>Setelah kode kita dipecah dan sampahnya dibuang langkah selanjutnya adalah bikin sisa kode itu jadi sekecil mungkin. Ini namanya <strong>minifikasi</strong> dan <strong>kompresi</strong>.</p><p><strong>Minifikasi</strong> itu proses buat ngurangin ukuran file kode kita tanpa mengubah fungsionalitasnya. Caranya gimana Menghapus semua spasi komentar newline dan ngubah nama variabel atau fungsi jadi yang paling pendek. Misalnya variabel <code>userFirstName</code> bisa jadi <code>a</code>. Ini bikin kode jadi susah dibaca manusia tapi browser tetep bisa eksekusi tanpa masalah dan ukurannya jadi jauh lebih kecil. Tools minifikasi populer buat JavaScript adalah <strong>Terser</strong> dan buat CSS ada <strong>CSSNano</strong>. Bundler seperti Webpack dan Vite biasanya sudah mengintegrasikan minifikasi secara otomatis di mode produksi.</p><p><strong>Kompresi</strong> adalah tahap selanjutnya. Ini bukan lagi soal ngurangin spasi atau ganti nama variabel tapi bener bener ngecilin ukuran file menggunakan algoritma kompresi. Dua algoritma paling umum yang dipakai di web adalah <strong>Gzip</strong> dan <strong>Brotli</strong>. Gzip itu udah standar banget sementara Brotli itu kompresi yang lebih baru dan seringkali bisa ngasih rasio kompresi yang lebih baik dibanding Gzip terutama buat file teks seperti JavaScript dan CSS.</p><p>Kompresi ini biasanya terjadi di sisi server. Ketika browser minta sebuah file server bakal kompres file tersebut sebelum dikirim. Browser kemudian yang bertanggung jawab buat mendekompilasi file yang sudah terkompresi. Kita bisa ngatur konfigurasi server kita Apache Nginx buat ngaktifin Gzip atau Brotli. Pastikan ini aktif ya biar file file kita yang udah diminifikasi bisa dikirim dalam bentuk yang lebih kecil lagi ke user.</p><h4>5 Menganalisa dan Mengurangi Dependencies Ketergantungan Kode</h4><p>Seringkali bundle kita bengkak gara gara kita pake library pihak ketiga yang ukurannya gede banget. Kita install package seperti <code>moment.js</code> buat manipulasi tanggal padahal mungkin cuma butuh sedikit fungsi doang. Atau <code>lodash</code> tadi itu contoh klasiknya.</p><p>Pake lagi <strong>Webpack Bundle Analyzer</strong> atau tools sejenis buat ngidentifikasi library library mana yang paling dominan di bundle kita. Setelah ketemu kita punya beberapa opsi: <ul><li><strong>Cari Alternatif yang Lebih Ringan</strong>: Ganti <code>moment.js</code> dengan <code>date-fns</code> atau <code>dayjs</code> yang ukurannya jauh lebih kecil dan modular.</li><li><strong>Import Spesifik</strong>: Kalo kita cuma butuh satu atau dua fungsi dari library besar coba cari cara buat import fungsi itu aja. Banyak library modern yang udah ngedukung import spesifik.</li><li><strong>Hapus yang Ga Dipakai</strong>: Kalo kita nemu library yang udah ga kepake lagi di project Jangan ragu buat uninstall dan hapus dari <code>package.json</code>.</li><li><strong>Bangun Sendiri</strong>: Buat fungsi utility yang kecil dan sederhana mungkin lebih baik kita bangun sendiri daripada import library gede. Misalnya fungsi debounce sederhana bisa kita tulis sendiri daripada import seluruh lodash.</li></ul></p><p>Ini butuh sedikit riset dan analisis tapi efeknya ke ukuran bundle bisa signifikan banget. Kita harus jadi developer yang selektif dalam memilih dependensi.</p><h4>6 Menggunakan CDN Content Delivery Network</h4><p>Meskipun ini bukan secara langsung ngurangin ukuran bundle tapi CDN itu penting banget buat ningkatin performa web kita secara keseluruhan terutama kecepatan pengiriman file. CDN adalah jaringan server yang tersebar di berbagai lokasi geografis di seluruh dunia.</p><p>Ketika user mengakses web kita CDN bakal ngirim aset statis seperti file JavaScript CSS gambar dari server yang paling dekat dengan lokasi user tersebut. Ini ngurangin latency waktu yang dibutuhkan buat data nyampe ke user dan ningkatin kecepatan loading website.</p><p>Kita bisa host file file statis kita di CDN seperti Cloudflare Akamai Amazon CloudFront Google Cloud CDN dan lain lain. Bahkan banyak library populer juga udah punya versi CDN nya sendiri seperti jQuery React atau Vue. Kadang pake CDN buat library pihak ketiga yang besar itu lebih efektif karena kemungkinan besar user sudah pernah download versi yang sama dari situs lain dan file tersebut sudah tersimpan di cache browser mereka.</p><h3>Tips Tambahan Buat Optimasi Makin Asik</h3><h4>Optimasi Gambar dan Media Lain</h4><p>Meskipun fokus kita di bundle JavaScript dan CSS tapi gambar dan media lain seringkali jadi kontributor terbesar buat total ukuran halaman web. Pastikan kita juga mengoptimasi ini: <ul><li><strong>Kompresi Gambar</strong>: Pake tool buat kompres gambar tanpa mengurangi kualitas secara drastis.</li><li><strong>Format Generasi Selanjutnya</strong>: Pake format gambar seperti WebP atau AVIF yang punya rasio kompresi lebih baik daripada JPEG atau PNG.</li><li><strong>Ukuran Responsif</strong>: Sajikan gambar dengan ukuran yang tepat buat tiap perangkat. Jangan kirim gambar 4K ke ponsel yang layarnya cuma 1080p.</li><li><strong>Lazy Load Gambar</strong>: Seperti yang sudah dibahas di atas.</li></ul></p><h4>Tetap Update Sama Bundler dan Library</h4><p>Ekosistem JavaScript itu bergerak cepat banget. Bundler kayak Webpack Vite atau Rollup selalu ngeluarin versi baru dengan optimasi dan fitur yang lebih baik. Pastikan kita selalu update ke versi terbaru buat dapetin benefit dari peningkatan performa tersebut. Sama juga dengan library yang kita pake. Versi baru kadang udah dioptimasi buat tree shaking atau punya ukuran yang lebih kecil.</p><h4>Pertimbangkan Preloading dan Prefetching Dengan Bijak</h4><p>Ini adalah teknik yang lebih advance. <strong>Preloading</strong> itu ngasih tahu browser buat mulai download resource yang akan dibutuhkan segera di masa depan. Misalnya file CSS atau JavaScript yang sangat penting buat tampilan awal. <strong>Prefetching</strong> itu buat resource yang mungkin akan dibutuhkan di masa depan tapi ga terlalu mendesak misalnya resource buat halaman berikutnya yang user kemungkinan akan kunjungi.</p><pre><code>html <!-- Contoh preloading sebuah font --> <link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin><p><!-- Contoh prefetching script untuk halaman berikutnya --> <link rel="prefetch" href="next-page.js" as="script"></code></pre></p><p>Hati hati jangan kebanyakan pake ini karena bisa jadi malah nambah beban awal kalo kita prefetch terlalu banyak atau salah resource. Pake ini dengan bijak dan berdasarkan data.</p><h3>Mengakhiri Perjalanan Optimasi Kita</h3><p>Wah perjalanan kita buat bikin web jadi enteng dengan optimasi bundle size ini cukup panjang ya. Dari mulai paham kenapa bundle size itu penting sampai ngulik berbagai teknik asik kayak code splitting tree shaking lazy loading minifikasi kompresi sampe milih dependensi yang bener.</p><p>Ingat optimasi itu bukan cuma sekali jalan terus selesai. Ini adalah proses berkelanjutan yang butuh pemantauan dan penyesuaian terus menerus. Ekosistem web itu dinamis jadi apa yang optimal hari ini mungkin perlu disesuaikan lagi besok.</p><p>Sebagai developer kita punya tanggung jawab buat ngasih user pengalaman terbaik. Website yang cepat dan responsif itu bukan cuma bikin user senang tapi juga ngangkat citra project kita dan bahkan bisa naikin konversi atau pendapatan. Jadi mari kita aplikasikan semua ilmu ini ke project project kita. Jangan pernah lelah buat terus belajar dan bereksperimen. Kita pasti bisa bikin web kita secepat kilat dan seenteng bulu. Semangat terus buat kita semua para developer!</p></body>