Javascript debounce Funktionen

Table of Contents

Beim Entprellen (engl. javascript debounce) geht’s darum, Funktionsaufrufe zu bündeln und nur den ersten oder letzten Call wirklich auszuführen:

Letzter Call: Jeder neue Trigger löscht den alten Timer, erst nach timeout wird mainFunc ausgeführt.

function debounce(mainFunc, timeout = 300) {
  let timeoutID;
  return (...args) => {
    clearTimeout(timeoutID);
    timeoutID = setTimeout(() => {
      mainFunc.apply(this, args);
    }, timeout);
  };
}
const process = debounce(() => searchSomething());

Hier ruft process() erst nach 300 ms ohne neue Eingaben searchSomething() auf.

Nur erster Call: Beim ersten Trigger läuft mainFunc sofort, alle weiteren innerhalb timeout werden ignoriert. Nach Ablauf wird der Timer zurückgesetzt.

function debounce(mainFunc, timeout = 300) {
  let timeoutID;
  return (...args) => {
    if (!timeoutID) {
      mainFunc.apply(this, args);
    }
    clearTimeout(timeoutID);
    timeoutID = setTimeout(() => {
      timeoutID = undefined;
    }, timeout);
  };
}

Damit startet searchSomething() direkt beim ersten Tipp – alle folgenden Buchstaben in den nächsten 300 ms werden weggedebounced.

Für React-Nutzer lässt sich das Ganze mit useCallback kombinieren:

const process = useCallback(debounce(() => searchSomething()), []);

So bleibt der Debounce-Funktion-Wrapper stabil und dein Component rendert nicht unnötig neu.

Dev Snacks

#GreenStack Newsletter

Bleibe up to date zum Thema Green Software und erweitere dein Wissen auf deiner #GreenStack Journey:

Teile den Beitrag mit anderen: