Pluginify

Masuk Daftar
Home > Blog > JavaScript > Debounce & Throttle JavaScript untuk Performa

Debounce & Throttle JavaScript untuk Performa

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:

  1. Meningkatkan Performa Aplikasi
  2. Mengurangi eksekusi fungsi yang tidak perlu.
  3. Menghemat Resource Browser
  4. CPU dan memory usage menjadi lebih stabil.
  5. Pengalaman Pengguna Lebih Baik
  6. Aplikasi terasa responsif dan tidak lag.
  7. Kode Lebih Terkontrol
  8. 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 this dan 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.

Pluginify
Pluginify