Funktions-Debouncing

Sprache:
JavaScript
15 Aufrufe
0 Favoriten
vor 5 Tagen

Code-Implementierung

JavaScript
function debounce(fn,delay){
    let timerId;
    return function(...args){
        clearTimeout(timerId);
        timerId=setTimeout(()=>{
            fn.apply(this,args);
        },delay);
    };
}

//usage
const d_layout = debounce(layout,500);
window.onresize = d_layout;

In JavaScript ist die Debounce-Funktion ein zentrales Werkzeug zur Optimierung von hochfrequenten und zeitintensiven Operationen. Ihre Kernlogik besteht darin, die Funktionsausführung zu verzögern und wiederholte Verzögerungen zu abbrechen. Dadurch wird sichergestellt, dass eine Funktion, die innerhalb kurzer Zeit mehrmals ausgelöst wird, erst nach einem angegebenen Verzögerungszeitraum nach dem letzten Auslösen ausgeführt wird – so werden Leistungsverluste durch überflüssige Aufrufe vermieden.

Prinzipiell lässt sich ihr Funktionieren am Beispiel des "Aufzugstürschlusses" verstehen: Nachdem ein Aufzug seine Türen geöffnet hat, wartet er standardmäßig eine feste Zeit (z. B. 2 Sekunden), bevor er sie schließt. Kommt während dieser Wartezeit ein neuer Passagier herein (entspricht einem erneuten Auslösen der Funktion), wird der ursprüngliche Warte-Timer abgebrochen und der Countdown neu gestartet. Nur wenn nach Abschluss des Countdowns kein neues Auslösen erfolgt, wird die Aktion "Türen schließen" (entspricht der Funktionsausführung) durchgeführt.

#Funktions-Debouncing

Snippet-Beschreibung

Anwendungsfälle

  • Hochfrequentes Auslösen: Die Funktion wird innerhalb kurzer Zeit wiederholt aufgerufen (z. B. resize-Ereignisse des Fensters, input-Ereignisse von Eingabefeldern). Dies ist nicht auf DOM-Ereignisse beschränkt, sondern gilt auch für hochfrequente Funktionsaufrufe in Nicht-DOM-Umgebungen (z. B. Node.js).
  • Zeitintensive Funktionen: Die aufgerufene Funktion ist entweder CPU-intensiv (z. B. Seitenlayout-Berechnungen, umfangreiche DOM-Operationen, die Reflows/Repaints verursachen) oder E/A-intensiv (z. B. Netzwerkanfragen, Dateilesen/Schreiben). Einfache Operationen (wie die Berechnung 1+1) erfordern kein Debouncing.
  • Priorität des letzten Ergebnisses: Aus den Ergebnissen mehrerer Aufrufe innerhalb kurzer Zeit ist nur das Ergebnis des letzten Aufrufs zu behalten. Beispielsweise: Nach der Anpassung der Fenstergröße benötigt man nur das Layout zur endgültigen Größe – Layouts aus dem Anpassungsprozess sind irrelevant.

Kommentare

Laden...