
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi pas dicek di Laravel Debugbar, jumlah query-nya malah meledak jadi ratusan padahal datanya cuma dikit. Ini masalah klasik yang sering bikin performa aplikasi drop di tahap production, yaitu isu N+1. Biasanya, ini kejadian karena kita terlalu nyaman manggil relasi di dalam loop tanpa sadar kalau Laravel lagi 'kerja keras' nge-query database berkali-kali buat setiap item yang kita akses.
Tips & Best Practices
Di banyak project, biasanya saya mulai dengan biasakan diri buat nge-cek log query sebelum fitur naik ke staging biar nggak ada kejutan performa. Selain itu, saya selalu pasang constraint ketat di model supaya nggak narik kolom yang nggak perlu, karena kadang kita cuma butuh ID atau nama aja. Terakhir, saya sering pakai metode with() dari awal pas lagi nulis controller, jadi habit ini ngebantu banget biar nggak lupa pas datanya udah mulai skala besar.
Contoh Kode
Kalau biasanya kamu nulis kayak gini pas mau nampilin daftar user beserta post-nya, hati-hati sama jebakan N+1:
// Bad approach: query jalan N+1 kali
$users = User::all();
foreach ($users as $user) {
echo $user->posts->count();
}
// Good approach: cuma butuh 2 query
$users = User::with('posts')->get();
foreach ($users as $user) {
echo $user->posts->count();
}Variasi Implementasi
Kalau datanya sangat dinamis, kita bisa pakai load() untuk lazy eager loading. Misal, kalau kita perlu kondisi if-else di controller sebelum mutusin mau load relasi apa, load() ini penyelamat banget daripada harus nulis query ulang. Di sisi lain, kalau cuma butuh data relasi buat hitungan, withCount() jauh lebih enteng daripada narik semua object model-nya ke memori.
Kesalahan Umum
- Lupa kalau
->postsdi view bakal manggil query baru kalau belum di-eager load. - Terlalu banyak pakai
with()buat relasi yang jarang dipakai, malah bikin query berat di awal. - Nggak pakai
select()di dalamwith(), padahal cuma butuh satu atau dua kolom aja. - Salah kaprah antara
load()danwith()yang akhirnya malah bikin query-nya jalan dua kali. - Mengabaikan paginasi saat narik relasi, yang bikin server kewalahan kalau datanya ribuan.
Ringkasan
Intinya, efisiensi database itu bukan cuma soal query yang cepat, tapi soal seberapa sedikit 'perjalanan' yang harus dilakukan aplikasi kita ke database. Jangan takut buat eksperimen dan selalu perhatikan hasil dari profiler. Pengalaman saya, sekali kita paham kapan harus pakai lazy atau eager loading, aplikasi jadi terasa jauh lebih ringan dan user pun makin happy karena loading page yang minim.
Komentar
Posting Komentar