Cara Kita Bikin Performa Next js Jadi Sat Set dan Anti Lemot

Cara Kita Bikin Performa Next js Jadi Sat Set dan Anti Lemot
Photo by Hack Capital / Unsplash

Pernah nggak sih kita ngerasa aplikasi web yang kita bangun pake Next js kok rasanya berat banget pas dibuka padahal ekspektasi kita harusnya sat set kayak kilat. Rasanya pasti agak nyesek pas liat skor Lighthouse merah membara atau pas kita coba scroll halamannya eh malah patah patah kayak hati yang lagi galau. Tenang aja karena kita nggak sendirian menghadapi masalah ini karena sebenernya Next js itu udah punya segudang fitur canggih buat bikin performa web jadi makin kencang asalkan kita tau cara pakainya dengan benar. Kita bakal bahas bareng gimana cara ngulik jeroan Next js biar performanya makin maksimal dan pengunjung web kita nggak kabur gara gara kelamaan nunggu loading.

Salah satu hal paling krusial yang wajib kita perhatiin pertama kali adalah urusan gambar karena biasanya aset visual ini yang paling banyak makan bandwidth. Untungnya Next js udah nyediain komponen sakti yang namanya Image component dan ini bener bener asik buat dipake. Kita jangan lagi pake tag img biasa kalau mau performa yang oke banget. Dengan pake komponen Image ini kita bisa dapetin optimasi otomatis kayak resize gambar sesuai ukuran layar pengunjung terus konversi format ke WebP yang jauh lebih ringan dan juga fitur lazy loading yang udah bawaan dari lahir. Jadi gambar cuma bakal didownload pas mau muncul di layar doang dan ini ngebantu banget buat ngurangin beban loading awal. Selain itu kita harus rajin pake properti priority buat gambar yang letaknya di paling atas atau istilah kerennya above the fold supaya gambar utama langsung muncul tanpa nunggu antrean.

Langkah selanjutnya yang nggak kalah penting adalah gimana cara kita ngatur font di dalam project kita. Seringkali kita asal ambil font dari Google Fonts terus main panggil aja di file CSS yang padahal cara itu bisa bikin layout shift atau teks yang berubah tiba tiba pas loading beres. Kita bisa manfaatin fitur next font yang udah dioptimasi banget sama tim Next js. Fitur ini bakal download file font pas waktu build dan nyimpen secara lokal jadi browser nggak perlu lagi request ke server pihak ketiga pas user buka web kita. Ini asik banget karena bisa ngilangin masalah font flickering dan bikin skor Cumulative Layout Shift kita jadi ijo royo royo. Kita juga bisa atur subset font supaya cuma karakter yang dibutuhin aja yang diunduh jadi ukuran file fontnya makin ramping dan nggak membebani koneksi internet user.

Ngomongin soal performa nggak bakal lengkap kalau kita nggak bahas soal Server Components yang sekarang jadi primadona di Next js terutama sejak era App Router dimulai. Kita harus mulai biasain buat taro sebanyak mungkin logika di server side biar ukuran bundle JavaScript yang dikirim ke client makin kecil. Bayangin aja kalau semua komponen kita bikin jadi Client Components maka browser user bakal kerja keras buat eksekusi semua kode itu dan itu yang bikin web jadi terasa lemot. Dengan pake Server Components kita bisa ambil data langsung dari database atau API di sisi server terus hasilnya dikirim dalam bentuk HTML mateng ke browser. Hasilnya ya jelas proses rendering jadi jauh lebih cepet dan interaksi di sisi user kerasa lebih enteng karena beban kerjanya udah dipindahin ke server yang tenaganya lebih gede.

Tapi kita juga harus pinter pinter milih mana yang harus jadi Client Component karena nggak semua hal bisa ditaro di server. Kalau ada komponen yang butuh interaksi kayak onClick atau butuh state pake useState ya mau nggak mau kita harus pake Client Component tapi tetep harus kita batasi banget jangkauannya. Kita bisa terapin teknik komposisi yang cerdas dengan cara naruh Client Component di level yang paling bawah dalam pohon hirarki komponen kita. Jadi kalau ada satu bagian kecil yang butuh interaksi jangan bikin satu halaman gede jadi client side semua tapi cukup bagian kecil itu aja yang dikasih direktori use client di paling atas filenya. Strategi ini asik banget buat jaga agar hydration process di browser nggak kegedean dan bikin halaman tetep responsif.

Selanjutnya kita masuk ke urusan script pihak ketiga yang sering banget jadi benalu buat performa web kita. Kita pasti sering kan nambahin script buat analytics atau iklan atau chat widget yang ukurannya lumayan gede. Kalau kita asal taruh di tag script biasa maka browser bakal berhenti render halaman sampe script itu selesai diunduh dan dijalanin. Solusi asik dari Next js adalah pake komponen Script dengan strategi loading yang bisa kita atur sendiri. Kita bisa pake strategi afterInteractive buat script yang nggak terlalu mendesak atau bahkan pake strategi lazyOnload buat script yang emang bisa nunggu sampe semua elemen lain selesai dimuat. Dengan cara ini kita bisa mastiin kalau user bisa liat konten utama kita dulu baru deh script tambahan itu jalan di belakang layar tanpa ganggu kenyamanan browsing.

Kita juga perlu ngomongin soal optimasi data fetching yang bener bener krusial buat aplikasi web modern. Di Next js kita punya kendali penuh buat nentuin kapan data harus diambil dan berapa lama data itu boleh disimpen di cache. Kita bisa pake fitur data caching dan revalidation yang udah disediain buat mastiin user dapet data terbaru tanpa harus nunggu request API yang berulang ulang. Kalau data kita nggak sering berubah mending kita pake Static Site Generation atau minimal Incremental Static Regeneration biar halamannya udah dalam bentuk file statis yang tinggal disajiin aja lewat CDN. Tapi kalau emang datanya bener bener dinamis banget ya kita pake Server Side Rendering tapi tetep dengan optimasi caching yang ketat biar server kita nggak keberatan mikir pas banyak traffic masuk.

Salah satu trik rahasia biar web kita makin sat set adalah dengan pake teknik dynamic imports buat komponen komponen yang ukurannya gede banget tapi nggak langsung dibutuhin pas halaman pertama kali dibuka. Misalnya kita punya komponen modal yang ribet banget atau chart library yang berat ya kita import aja secara dinamis pake fungsi dynamic dari Next js. Dengan begini kode JavaScript buat komponen itu baru bakal diunduh pas user bener bener mau pakenya aja. Ini bakal motong ukuran bundle awal secara signifikan dan bikin waktu interaktif atau Time to Interactive jadi makin singkat. Teknik code splitting otomatis ini bener bener ngebantu kita buat jaga aplikasi tetep ringan meskipun fiturnya udah mulai banyak dan kompleks.

Jangan lupa juga buat merhatiin urusan middleware kalau kita pake fitur itu di project kita. Middleware emang asik banget buat handle urusan proteksi rute atau i18n tapi kalau kita naruh logika yang terlalu berat di sana maka setiap request bakal kerasa lambat karena middleware jalan sebelum request nyampe ke tujuan. Kita harus pastiin kode di dalam middleware sesingkat mungkin dan hindari manggil API yang lemot di sana. Kalau emang butuh data user mending handle di server component aja daripada di middleware kecuali emang bener bener diperluin buat urusan keamanan. Kecepatan middleware itu sangat berpengaruh ke Time to First Byte jadi makin efisien kodenya makin cepet juga browser dapet respon awal dari server kita.

Terakhir kita harus sering sering ngecek kondisi web kita pake tools yang ada kayak bundle analyzer buat liat library mana sih yang ukurannya kegedean dan mungkin bisa kita ganti sama alternatif yang lebih ringan. Kadang kita suka gak sadar pasang library moment js padahal cuma buat format tanggal sederhana padahal ada dayjs yang ukurannya jauh lebih mungil. Kita harus punya mindset buat selalu pilih library yang emang modular dan tree shakeable biar kode yang nggak kepake nggak ikut masuk ke bundle produksi. Terus pas mau deployment pastiin kita pake platform yang emang support penuh fitur fitur Next js kayak Vercel karena mereka punya infrastruktur edge yang bikin konten kita bisa disajiin dari lokasi terdekat sama user.

Memang butuh usaha ekstra buat bikin performa Next js jadi bener bener sat set tapi hasilnya bakal sepadan banget sama kepuasan user pas pake web kita. Performa yang kencang bukan cuma soal angka di tools benchmark doang tapi soal gimana kita ngasih pengalaman terbaik buat orang yang udah luangin waktunya buat buka karya kita. Jadi yuk kita mulai cek lagi satu satu komponen kita dan terapin tips tips tadi biar aplikasi kita nggak cuma keren secara tampilan tapi juga jagoan secara performa. Dengan semua fitur modern yang udah disediain sama Next js sebenernya kita udah dikasih modal yang kuat banget tinggal gimana cara kita ngeraciknya aja biar makin asik dan anti lemot buat semua orang. Teruslah bereksperimen dan jangan lupa buat terus pantau perkembangan update terbaru karena ekosistem web ini geraknya cepet banget dan kita harus tetep update biar nggak ketinggalan zaman. Semangat terus buat kita semua para pengembang yang pengen bikin dunia web jadi tempat yang lebih kencang dan menyenangkan buat dijelajahi tanpa drama loading lama yang bikin emosi. Selamat ngoding dan semoga aplikasi kita makin sukses ke depannya dengan performa yang bener bener luar biasa.