Debounce
- Okunuşu
- dibauns
Kısaca
Debounce, bir fonksiyonu art arda gelen olaylar belli bir süre durana dek ertelemektir; böylece arama kutusu her tuşta değil, yazma bitince istek gönderir.
Debounce nedir?
Bazı tarayıcı olayları çok sık tetiklenir: her tuş vuruşu, her kaydırma adımı, pencere yeniden boyutlandırılırken her piksel. Her birinde bir API isteği ya da yerleşim hesabı gibi pahalı bir iş çalıştırmak kaynak israfıdır ve sayfanın takılmasına yol açabilir. Debounce edilmiş bir fonksiyon her olayda bir zamanlayıcıyı yeniden başlatır ve ancak olaylar örneğin 300 milisaniye boyunca durduğunda bir kez çalışır.
Kardeşi throttling'dir; kaç olay gelirse gelsin fonksiyonun her aralıkta en fazla bir kez çalışmasını garanti eder. Throttling, kaydırırken ya da sürüklerken bir konumu güncellemek gibi düzenli güncellemelerin önemli olduğu sürekli işlere uyar; debounce ise yazarken arama, otomatik kaydetme ya da bir alanı doğrulamak gibi yalnızca son değerin önemli olduğu işlere.
Debounce, olağan seçim olan arka kenarda (trailing edge), yani duraklamadan sonra çalışabilir; ya da ön kenarda (leading edge), yani ilk olayda hemen çalışıp serinin geri kalanını yok sayabilir; bu da iki kez tıklanmaması gereken düğmelere uyar. Lodash gibi yardımcı kütüphaneler iki fonksiyonu da sunar; elle yazmak da yalnızca birkaç satırdır.
Sık yapılan bir yanlış, debounce'un bir uygulamayı hızlandırdığını düşünmektir. İşin ne sıklıkla yapıldığını azaltır, ama sonuç görünmeden önce bir gecikme de ekler. Bekleme süresini hızlı hissettirecek şekilde seçin ve önceki isteklerin geç yanıtlarının yine gelebileceğini unutmayın; bu yüzden arama kodu eskimiş istekleri iptal etmeli ya da yok saymalıdır.
Önemli noktalar
- Debounce, olaylar belirli bir süre durana kadar bekler, sonra bir kez çalışır.
- Throttle, sürekli olaylar sırasında her aralıkta en fazla bir kez çalışır.
- Yazarken arama, otomatik kaydetme ve doğrulama için debounce kullanın.
- Kaydırma, yeniden boyutlandırma ve sürükleme için throttle kullanın.
- Kısa bir gecikme ekler; eskimiş isteklerin de ele alınması gerekir.
Örnek
function debounce(fn, wait) {
let timer;
return (...args) => {
clearTimeout(timer); // every new event restarts the wait
timer = setTimeout(() => fn(...args), wait);
};
}
const search = debounce(async (query) => {
const results = await fetch(`/api/search?q=${encodeURIComponent(query)}`).then((r) => r.json());
render(results);
}, 300);
document.querySelector("#q").addEventListener("input", (e) => search(e.target.value));
// Typing "react" sends one request, 300 ms after the last key.Sık sorulan sorular
Debounce ile throttle arasındaki fark nedir?
Debounce bir duraklama bekler ve art arda gelen olayların sonunda bir kez çalışır. Throttle ise olaylar gelmeye devam ederken düzenli olarak, her aralıkta en fazla bir kez çalışır.
Debounce için ne kadar gecikme kullanmalıyım?
Yazma için 200 ile 400 milisaniye arası, her tuşta istek göndermeden hızlı hissettirir. Otomatik kaydetme gibi pahalı işler için bir saniye ya da daha fazlası yaygındır.
Debounce adı nereden geliyor?
Elektronikten: mekanik bir anahtar bir kez basıldığında sıçrar (bounce) ve birkaç sinyal gönderir; debounce devreleri de bu sinyal serisini tek bir basış olarak ele alır.
Sık karşılaştırılanlar
İlgili sayfalar
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- DOMWeb Geliştirme, s. 14DOM, tarayıcının bir web sayfasını temsil eden ve JavaScript'in okuyup değiştirerek kullanıcının gördüğünü güncelleyebildiği bellek içi nesne ağacıdır.
- Rate LimitingBackend ve API'ler, s. 37Rate limiting, istemcinin belli bir sürede yapabileceği istek sayısını sınırlayıp sunucuyu ya da API'yi kötüye kullanımdan ve aşırı yükten koruyan tekniktir.
- AJAXWeb Geliştirme, s. 1AJAX (Asynchronous JavaScript and XML), JavaScript ile sunucudan arka planda veri alıp sayfayı yeniden yüklemeden yalnızca bir kısmını güncelleme tekniğidir.
- CallbackProgramlamanın Temelleri, s. 5Callback, başka bir fonksiyona argüman olarak verilen ve o fonksiyonun bir iş bittiğinde ya da bir olay gerçekleştiğinde sonradan çağırdığı fonksiyondur.
- Core Web VitalsWeb Geliştirme, s. 8Core Web Vitals, bir sayfanın gerçek kullanıcı deneyimini ölçen üç metriktir: yükleme hızı (LCP), yanıt verme (INP) ve görsel kararlılık (CLS).
- ThrottlingWeb Geliştirme, s. 48Throttling, bir fonksiyonu ne kadar sık çağrılırsa çağrılsın aralık başına en fazla bir kez çalıştırır; böylece kaydırma işleyicileri düzenli güncellenir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin