← Blog
Yazı
· 9 dk· web development

Debounce ve Throttle Nedir? Arama ve Scroll Performansı İçin Pratik Rehber

Debounce ve throttle farkı nedir? Arama input'u, resize ve scroll olaylarında hangi tekniği ne zaman kullanmanız gerektiğini örneklerle görün.

Debounce ve Throttle Nedir?

Input yazarken, scroll ederken veya pencere boyutu değişirken olaylar saniyede onlarca kez tetiklenebilir. Bu olaylara her seferinde ağır işlem bağlamak UI'ı yavaşlatır. Debounce ve throttle bu yoğunluğu yönetmek için kullanılır.

Kısa Fark

  • Debounce: Olaylar durduktan sonra tek sefer çalıştırır.
  • Throttle: Belirli aralıklarla en fazla bir kez çalıştırır.

Ne Zaman Hangisi?

SenaryoÖneriNeden
Arama kutusuDebounceKullanıcı yazmayı bitirdiğinde API çağrısı yapmak için
Scroll pozisyonu izlemeThrottleSabit aralıkta güncelleme yeterli
Window resizeDebounceBoyut değişimi bittikten sonra hesaplama yapmak için

Debounce Örneği

function debounce(fn, delay = 300) {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => fn(...args), delay);
  };
}

const search = debounce((q) => {
  fetch("/api/search?q=" + encodeURIComponent(q));
}, 400);

Throttle Örneği

function throttle(fn, interval = 200) {
  let last = 0;
  return (...args) => {
    const now = Date.now();
    if (now - last >= interval) {
      last = now;
      fn(...args);
    }
  };
}

window.addEventListener("scroll", throttle(() => {
  console.log(window.scrollY);
}, 100));

Sık Hatalar

  • Debounce sürelerini rastgele seçmek: UX'i geciktirebilir; gerçek senaryoda ölçün.
  • Her yere throttle koymak: Bazı akışlarda son değeri kaçırabilirsiniz.
  • Cleanup unutmak: Bileşen unmount olduğunda timer/event listener temizlenmelidir.

Sonuç

Debounce ve throttle küçük gibi görünür ama doğru kullanıldığında ağ trafiğini düşürür, CPU yükünü azaltır ve akıcı bir arayüz sağlar. Kural basit: "bittiğinde çalıştır" için debounce, "akarken kontrollü çalıştır" için throttle.