Pernah nggak sih kamu buka website belanja online, terus loading-nya lama banget sampai kamu mau tutup tab dan pindah ke aplikasi lain? Menurut riset Google, 53% pengguna akan meninggalkan sebuah website kalau loading-nya lebih dari 3 detik. Nah, kalau website itu dibangun pakai PHP (bahasa pemrograman yang banyak dipakai buat bikin website dinamis), salah satu penyebab paling umum website jadi lemot ternyata bukan karena kodenya rumit, tapi karena cara PHP "ngobrol" dengan database-nya yang salah.
Di artikel ini kita bakal bahas kenapa hal itu bisa terjadi, pakai bahasa yang gampang dicerna meskipun kamu baru belajar PHP. Yuk simak pelan-pelan.
Coba bayangkan kamu lagi makan di restoran dengan 10 teman. Kalau pelayannya bolak-balik ke dapur satu-satu buat nanya pesanan tiap orang, itu bakal makan waktu lama banget, kan? Idealnya, pelayan itu nyatet semua pesanan sekaligus, baru sekali jalan ke dapur.
Nah, PHP itu ibarat si pelayan, dan database adalah dapurnya. Ketika PHP harus "bolak-balik" ke database berkali-kali untuk ambil data yang sebenarnya bisa diambil sekaligus, di situlah performa website mulai turun drastis. Fenomena ini di dunia pemrograman dikenal dengan istilah N+1 Query Problem.
Istilah ini kedengarannya teknis, tapi konsepnya sederhana. Bayangkan kamu punya daftar 100 pesanan pelanggan, dan untuk tiap pesanan kamu mau tahu siapa nama pelanggannya. Kalau caranya salah, PHP akan menjalankan 1 query untuk ambil semua pesanan, lalu 100 query tambahan untuk ambil nama tiap pelanggan satu per satu. Total jadi 101 kali "jalan ke dapur" alias 101 query ke database.
// Contoh kode yang bikin lemot (N+1 Problem)
$pesanan = getSemuaPesanan(); // 1 query
foreach ($pesanan as $p) {
$nama = getNamaPelanggan($p['id_pelanggan']); // query berulang!
echo $nama;
}
Bayangkan kalau bukan 100 pesanan, tapi 10.000 data. Server kamu bisa "ngos-ngosan" karena harus melakukan ribuan koneksi bolak-balik ke database dalam waktu singkat.
Solusi paling umum adalah menggabungkan query supaya data yang dibutuhkan diambil dalam satu kali "perjalanan" saja. Di dunia database, ini biasanya dilakukan dengan teknik JOIN, yaitu cara menggabungkan dua tabel data sekaligus dalam satu query.
// Contoh kode yang lebih efisien (pakai JOIN)
$query = "SELECT pesanan.*, pelanggan.nama
FROM pesanan
JOIN pelanggan ON pesanan.id_pelanggan = pelanggan.id";
$hasil = $koneksi->query($query);
while ($row = $hasil->fetch_assoc()) {
echo $row['nama'];
}
Dengan cara ini, PHP cuma perlu "jalan ke dapur" sekali, bawa pulang semua data sekaligus. Website jadi jauh lebih cepat, dan server nggak perlu kerja keras berkali-kali lipat.
Banyak pemula belajar PHP dan database secara terpisah, padahal keduanya saling berkaitan erat. Memahami cara query bekerja bukan cuma soal "bisa nampilin data", tapi juga soal efisiensi—karena di dunia nyata, aplikasi yang lambat bisa bikin pengguna kabur, bahkan sebelum sempat lihat produk yang kamu jual.
Seorang developer senior pernah bilang, "Kode yang jalan itu bukan berarti kode yang baik. Kode yang baik itu kode yang jalan, cepat, dan bisa dipahami orang lain." Nah, memahami masalah seperti N+1 query ini adalah salah satu langkah kecil menuju kode yang "baik" itu.
Website lemot nggak selalu soal koneksi internet yang jelek. Kadang, masalahnya ada di logika PHP yang terlalu banyak "bolak-balik" ke database tanpa disadari. Dengan memahami konsep N+1 query problem dan cara mengatasinya lewat JOIN atau eager loading, kamu udah selangkah lebih dekat jadi programmer PHP yang nggak cuma bisa bikin kode jalan, tapi juga bikin kode yang efisien.
Yuk, coba cek project PHP kamu sekarang. Ada nggak query yang nyelip di dalam loop? Kalau ada, coba refactor pelan-pelan dan rasakan bedanya. Selamat mencoba, dan sampai jumpa di artikel PHP berikutnya di RuangCoding.id!
Download semua project premium tanpa batas mulai Rp99.000.