Lewati ke konten utama

Laravel Debugbar

Laravel Debugbar (sebelumnya barryvdh/laravel-debugbar) adalah paket untuk mengintegrasikan PHP Debug Bar dengan Laravel. Toolbar ini sangat membantu untuk melihat apa yang terjadi di balik layar aplikasi Anda.

Instalasi

Alat ini diinstal sebagai dependensi pengembangan (development dependency) agar tidak membebani performa atau membocorkan informasi di lingkungan produksi.

composer require fruitcake/laravel-debugbar --dev

Menerbitkan konfigurasi:

php artisan vendor:publish --provider="Fruitcake\LaravelDebugbar\ServiceProvider"

Penggunaan

Debugbar akan aktif secara otomatis jika APP_DEBUG=true dan environment bukan production atau testing.

Fitur Utama

  • QueryCollector: Menampilkan semua query database, termasuk binding dan waktu eksekusinya.
  • RouteCollector: Menampilkan informasi tentang rute saat ini.
  • ViewCollector: Menampilkan daftar view yang dimuat.
  • EventsCollector: Menampilkan semua event yang dipicu.
  • LaravelCollector: Menampilkan versi Laravel dan environment (default: nonaktif).
  • Ajax/Livewire Support: Menangkap request Ajax dan Livewire secara otomatis (muncul di dropdown di sisi kanan).

Helper Functions

Ada beberapa fungsi pembantu yang memudahkan proses debugging:

// Semua argumen akan di-dump sebagai pesan debug
debug($var1, $someString, $intValue, $object);

// Dump koleksi sebagai pesan debug
collect([$var1, $someString])->debug();

// Pengukuran waktu manual
start_measure('render', 'Time for rendering');
stop_measure('render');

// Atau menggunakan closure
measure('My long operation', function() {
// Operasi yang ingin diukur...
});

Facade Interface

Anda juga dapat menggunakan Facade Debugbar untuk mencatat pesan dengan level PSR-3:

\Debugbar::info($object);
\Debugbar::error('Error!');
\Debugbar::warning('Watch out..');
\Debugbar::addThrowable($exception);

Tutorial: Mendeteksi & Memperbaiki N+1 Query

N+1 query adalah masalah performa paling umum di Laravel. Masalah ini terjadi ketika Anda mengambil daftar data (misal: 10 post), lalu di dalam loop Anda memanggil relasi (misal: $post->user->name). Laravel akan melakukan 1 query untuk mengambil 10 post, DAN 10 query tambahan untuk mengambil user masing-masing post. Total = 11 query (N+1).

Cara Mendeteksi dengan Debugbar

  1. Buka halaman yang lambat atau yang ingin Anda cek.
  2. Lihat toolbar Debugbar di bagian bawah, klik tab Queries.
  3. Cari pola query yang berulang-ulang terhadap tabel yang sama dengan hanya perbedaan ID.
    • Contoh: SELECT * FROM users WHERE id = 1, SELECT * FROM users WHERE id = 2, ...
  4. Debugbar biasanya akan memberi peringatan (background merah atau ikon peringatan) jika mendeteksi jumlah query yang tidak wajar.

Cara Memperbaiki

Solusinya adalah menggunakan Eager Loading.

Kasu : Menampilkan daftar Post dengan Nama Usernya.

Salah (N+1):

$posts = Post::all(); // 1 query

foreach ($posts as $post) {
echo $post->user->name; // ini memicu N query tambahan!
}

Benar (Eager Loading):

$posts = Post::with('user')->get(); // Hanya 2 query total

foreach ($posts as $post) {
echo $post->user->name; // Data sudah siap di memori
}

Jika Anda sudah terlanjur memiliki instance model dan ingin memuat relasinya nanti (Lazy Eager Loading):

$user->load('posts');

Setelah menerapkan with() atau load(), cek kembali tab Queries di Debugbar. Jumlah query seharusnya berkurang drastis menjadi hanya 2 atau beberapa saja.


Anda dapat menonaktifkan Debugbar secara manual di .env:

DEBUGBAR_ENABLED=true

Keamanan

Peringatan: Gunakan Debugbar hanya di lingkungan pengembangan. Jangan aktifkan di website yang dapat diakses publik karena dapat membocorkan informasi sensitif dari request yang tersimpan (seperti query database, data session, dll).