Persönlich fand ich debounce schwieriger zu verstehen als throttle.
Da beide Funktionen Ihnen helfen, die Ausführung zu verschieben und die Rate einer Ausführung zu reduzieren. Angenommen, Sie rufen die von throttle/debounce zurückgegebenen dekorierten Funktionen wiederholt auf...
- Throttle: Die Originalfunktion wird höchstens einmal pro angegebener Zeitspanne aufgerufen.
- Debounce: Die Originalfunktion wird aufgerufen, nachdem der Aufrufer aufgehört hat, die dekorierte Funktion nach einer festgelegten Zeitspanne aufzurufen.
Ich fand den letzten Teil von debounce entscheidend, um das Ziel zu verstehen, das erreicht werden soll. Ich fand auch eine alte Version der Implementierung von _.debounce hilfreich (mit freundlicher Genehmigung von https://davidwalsh.name/function-debounce).
// Gibt eine Funktion zurück, die solange aufgerufen wird, wie sie fortlaufend aufgerufen wird, nicht
// ausgelöst wird. Die Funktion wird aufgerufen, nachdem sie N Millisekunden lang nicht mehr aufgerufen wurde. Wenn `immediate` übergeben wird, wird die Funktion am
// vorderen Rand ausgelöst, anstatt am hinteren Rand.
_.debounce = function(func, wait, immediate) {
var timeout;
return function() {
var context = this, args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
Vielleicht eine weit hergeholte Metapher, aber könnte auch helfen.
Sie haben eine Freundin namens Schwätzchen, die gerne über IM mit Ihnen spricht. Angenommen, wenn sie spricht, sendet sie alle 5 Sekunden eine neue Nachricht, während Ihr IM-Anwendungssymbol auf und ab springt, können Sie das...
- Naive Herangehensweise: Überprüfen Sie jede Nachricht, solange sie ankommt. Wenn Ihr App-Symbol springt, überprüfen Sie es. Es ist nicht der effektivste Weg, aber Sie sind immer auf dem neuesten Stand.
- Throttle Ansatz: Sie überprüfen einmal alle 5 Minuten (wenn neue eintreffen). Wenn eine neue Nachricht ankommt, ignorieren Sie sie, wenn Sie in den letzten 5 Minuten überprüft haben. Mit diesem Ansatz sparen Sie Zeit, während Sie immer noch informiert bleiben.
- Debounce Ansatz: Sie kennen Schwätzchen, sie zerlegt eine ganze Geschichte in Stücke und sendet sie einer nach dem anderen. Sie warten, bis Schwätzchen die ganze Geschichte beendet hat: Wenn sie für 5 Minuten aufhört, Nachrichten zu senden, nehmen Sie an, dass sie fertig ist, und überprüfen dann alle.