Debounce & Throttle JavaScript untuk Performa
Dalam pengembangan aplikasi web modern, performa menjadi faktor krusial yang secara langsung memengaruhi pengalaman pengguna. Banyak fitur interaktif—seperti pencarian real-time, scroll event, resize window, dan input validation—dapat memicu eksekusi JavaScript secara berulang dalam waktu singkat. Tanpa pengelolaan yang tepat, kondisi ini berpotensi menyebabkan penurunan performa.
Untuk mengatasi masalah tersebut, dikenal dua teknik optimasi event handling, yaitu debounce dan throttle JavaScript. Artikel ini membahas konsep, perbedaan, serta contoh implementasi debounce dan throttle secara profesional menggunakan JavaScript native.
Pengertian Debounce dan Throttle
Apa Itu Debounce?
Debounce adalah teknik untuk menunda eksekusi fungsi hingga event berhenti terjadi dalam jangka waktu tertentu. Fungsi hanya akan dijalankan setelah tidak ada event baru selama delay yang ditentukan.
Debounce sangat cocok untuk:
- Input pencarian (search box)
- Validasi form realtime
- Autocomplete
Apa Itu Throttle?
Throttle adalah teknik untuk membatasi eksekusi fungsi agar hanya berjalan satu kali dalam interval waktu tertentu, meskipun event dipicu berkali-kali.
Throttle umumnya digunakan pada:
- Scroll event
- Resize window
- Mouse movement
- Infinite scroll
Ilustrasi Konsep Debounce & Throttle
Ilustrasi ini menunjukkan perbedaan pola eksekusi antara debounce dan throttle pada event yang terjadi secara cepat dan berulang.
Mengapa Debounce & Throttle Penting?
Beberapa alasan utama penggunaan debounce dan throttle:
- Meningkatkan Performa Aplikasi
- Mengurangi eksekusi fungsi yang tidak perlu.
- Menghemat Resource Browser
- CPU dan memory usage menjadi lebih stabil.
- Pengalaman Pengguna Lebih Baik
- Aplikasi terasa responsif dan tidak lag.
- Kode Lebih Terkontrol
- Event handling menjadi lebih terprediksi.
Cara Kerja Debounce JavaScript
Debounce bekerja dengan mengatur ulang timer setiap kali event dipicu. Fungsi hanya dijalankan ketika timer selesai tanpa adanya event baru.
Contoh Implementasi Debounce
function debounce(func, delay) {
let timeout;
return function (...args) {
clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(this, args);
}, delay);
};
}
Contoh Penggunaan Debounce
const searchInput = document.getElementById('search');
searchInput.addEventListener(
'input',
debounce(function (e) {
console.log('Mencari:', e.target.value);
}, 500)
);
Pada contoh ini, fungsi pencarian hanya akan dijalankan setelah pengguna berhenti mengetik selama 500 milidetik.
Cara Kerja Throttle JavaScript
Throttle memastikan fungsi hanya dieksekusi sekali dalam interval waktu tertentu, terlepas dari seberapa sering event terjadi.
Contoh Implementasi Throttle
function throttle(func, limit) {
let inThrottle = false;
return function (...args) {
if (!inThrottle) {
func.apply(this, args);
inThrottle = true;
setTimeout(() => {
inThrottle = false;
}, limit);
}
};
}
Contoh Penggunaan Throttle
window.addEventListener(
'scroll',
throttle(function () {
console.log('Scroll position:', window.scrollY);
}, 300)
);
Fungsi di atas hanya akan dijalankan maksimal satu kali setiap 300 milidetik meskipun event scroll terjadi terus-menerus.
Perbedaan Debounce dan Throttle
AspekDebounceThrottlePola EksekusiSetelah event berhentiBerkalaCocok untukInput, searchScroll, resizeFokusMengurangi eksekusi akhirMembatasi frekuensiRespons AwalTertundaLangsung
Memahami perbedaan ini membantu pengembang memilih teknik yang tepat sesuai kebutuhan.
Contoh Kasus Penggunaan
Debounce pada Pencarian Realtime
Debounce mencegah request API berlebihan saat pengguna mengetik cepat.
Throttle pada Infinite Scroll
Throttle memastikan load data tidak dipanggil terlalu sering saat pengguna melakukan scroll.
Best Practice Debounce & Throttle
Beberapa praktik terbaik yang disarankan:
- Gunakan debounce untuk event berbasis input
- Gunakan throttle untuk event berbasis pergerakan
- Tentukan delay yang sesuai dengan kebutuhan UX
- Gunakan JavaScript native untuk kebutuhan sederhana
- Hindari kombinasi debounce dan throttle tanpa tujuan jelas
Kesalahan Umum yang Perlu Dihindari
Beberapa kesalahan yang sering terjadi:
- Menggunakan debounce pada scroll event
- Delay terlalu besar sehingga UI terasa lambat
- Menulis fungsi debounce/throttle berulang tanpa reusable utility
- Mengabaikan konteks
thisdan parameter fungsi
Menghindari kesalahan ini akan meningkatkan kualitas kode dan performa aplikasi.
Kesimpulan
Debounce dan throttle JavaScript merupakan teknik fundamental dalam optimasi performa aplikasi web modern. Dengan mengontrol frekuensi eksekusi event, pengembang dapat menciptakan aplikasi yang lebih efisien, stabil, dan ramah pengguna.
Pemahaman yang baik tentang kapan menggunakan debounce atau throttle akan membantu menghasilkan kode yang bersih, terstruktur, dan siap untuk kebutuhan production.