كيف أطبّق الـ Debouncing في JavaScript؟

سهلقراءة دقيقةآخر تحديث 1 أكتوبر 2026

تطوير الويب جافاسكربت

الإجابة

الـ Debouncing يعني تأجيل تنفيذ الدالة حتى تمر فترة دون أحداث جديدة. نطبقه بـ setTimeout():

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

const search = debounce((text) => {
  fetch(`/api/search?q=${encodeURIComponent(text)}`);
}, 400);

input.addEventListener('input', (e) => search(e.target.value));

لماذا؟

دون debounce، كل حرف يكتبه المستخدم يرسل طلبًا للخادم. معه، يُرسل طلب واحد بعد أن يتوقف عن الكتابة.

Debounce أم Throttle؟

  • Debounce: ينفّذ بعد توقف الأحداث.
  • Throttle: ينفّذ مرة كل فترة على الأكثر أثناء استمرار الأحداث، مثل التمرير.

اختبر فهمك

في JavaScript، كيف يُطبَّق الـ Debouncing عند التعامل مع أحداث مثل الكتابة في حقل نص؟