Performa aplikasi Laravel adalah salah satu hal pertama yang degradasi seiring pertumbuhan data dan traffic. Masalahnya, banyak developer fokus ke feature development dulu, dan baru kepikiran optimasi saat production sudah lambat. Untungnya, ada beberapa teknik yang bisa kamu terapkan sekarang tanpa perlu mengubah seluruh architecture aplikasi kamu.
Dalam artikel ini, kita akan membahas 7 tips optimasi Laravel yang praktis dan sudah teruji di berbagai project di Indonesia. Semuanya bisa langsung kamu coba hari ini.
1. Gunakan Eager Loading untuk Hindari N+1 Query Problem
Ini adalah mistake paling umum yang menyebabkan query melimpah. Ketika kamu looping data dan akses relasi di dalam loop, Laravel akan eksekusi satu query per item — inilah yang disebut N+1 problem.
// ❌ Buruk — N+1 query
$users = User::all();
foreach ($users as $user) {
echo $user->posts()->count(); // Query baru setiap iterasi
}
// ✅ Baik — satu query dengan eager loading
$users = User::with('posts')->get();
foreach ($users as $user) {
echo $user->posts()->count();
}
Dengan with(), semua relasi di-fetch sekali saja. Kalau kamu punya nested relation, gunakan dot notation: with('posts.comments'). Untuk relasi kondisional, gunakan loadMissing() agar tidak fetch ulang data yang sudah ada.
2. Manfaatkan Database Indexing dengan Bijak
Index adalah fondasi query cepat. Tanpa index yang tepat, MySQL akan melakukan full table scan setiap kali query, terutama kalau table besar. Identifikasi column yang sering dipakai di WHERE clause atau JOIN, lalu buat index di sana.
- Buat migration untuk menambah index:
$table->index('column_name') - Untuk unique constraint:
$table->unique('email') - Foreign key biasanya auto-indexed, tapi verify di database kamu
- Hindari index berlebihan — setiap index memperlambat INSERT/UPDATE
Kamu bisa cek query plan dengan EXPLAIN di MySQL untuk lihat apakah query sudah menggunakan index atau masih scan penuh.
3. Implement Caching untuk Data Statis
Data yang sering di-query tapi jarang berubah, seperti list kategori, setting aplikasi, atau profil user — ini adalah kandidat ideal untuk caching. Laravel punya berbagai cache driver: File, Redis, Memcached, Database.
// Cache data selama 24 jam
$categories = Cache::remember('categories', 86400, function () {
return Category::all();
});
// Saat data update, invalidate cache
Cache::forget('categories');
Untuk project skala menengah, Redis adalah pilihan terbaik karena cepat dan support TTL otomatis. Install via composer require predis/predis dan set CACHE_DRIVER=redis di .env kamu.
4. Select Hanya Column yang Dibutuhkan
Kebiasaan menggunakan select('*') sering membuang bandwidth. Kalau kamu hanya butuh nama dan email user, gunakan select() eksplisit:
// ❌ Fetch semua column
$users = User::all();
// ✅ Fetch hanya yang dibutuhkan
$users = User::select('id', 'name', 'email')->get();
Ini terasa sepele untuk 100 records, tapi untuk 10,000 records dengan 50+ columns, perbedaannya signifikan di bandwidth dan memory usage. Kebiasaan ini juga berguna untuk menghindari expose data sensitif yang tidak perlu dikirim ke frontend.
5. Gunakan Database Query Optimization
Selain eager loading dan index, ada beberapa teknik query yang berdampak besar:
- Limit dan Offset dengan Hati-hati: Untuk pagination, hindari offset besar. Gunakan keyset pagination atau cursor jika perlu.
- Aggregation di Database, Bukan di PHP: Gunakan
count(),sum(),avg()MySQL langsung, jangan fetch semua data lalu hitung di PHP. - Batch Processing untuk Data Besar: Kalau perlu process jutaan records, gunakan
chunk()untuk loop per 1000 rows, bukan sekaligus. - Lazy Collection:
User::lazy()menggunakan generator untuk memory efficiency pada data besar.
6. Enable Query Logging di Development, Tapi Disable di Production
Query logging yang terus nyala di production bisa memperlambat aplikasi. Gunakan hanya saat development untuk identifikasi N+1 atau query yang lambat:
// Di development, tambahkan di service provider atau bootstrap
if (app()->environment('local')) {
DB::listen(function ($query) {
\Log::info($query->sql, $query->bindings);
});
}
Tools seperti Laravel Telescope juga berguna untuk profiling di development environment.
7. Optimize View Rendering dan Asset Loading
Performance bukan hanya backend. Render view yang kompleks bisa juga menjadi bottleneck, terutama kalau looping banyak data di blade template.
- Pindahkan logic berat ke controller atau model, jangan di view
- Cache fragment view yang statis dengan
@cachedirective - Minify CSS dan JS dengan Laravel Mix atau Vite
- Lazy load image di frontend untuk mempercepat initial page load
Kesimpulan
Optimasi performa Laravel tidak memerlukan overhaul besar-besaran. Dengan menerapkan 7 tips di atas — eager loading, indexing, caching, query selection, query optimization, logging management, dan view optimization — kamu sudah bisa merasakan peningkatan signifikan di response time aplikasi kamu. Mulai dari yang paling mudah implementasinya (eager loading, select), lalu lanjut ke caching dan database indexing. Monitor dengan tools seperti Laravel Debugbar atau Telescope untuk lihat improvement secara real-time.
Ingat, optimasi adalah proses berkelanjutan. Jangan tunggu aplikasi lambat baru mulai, tapi lakukan best practice dari awal development cycle.