Ich persönlich fand debounce schwerer zu begreifen als Drossel .
Da beide Funktionen Ihnen helfen, die Ausführungsrate zu verschieben und zu reduzieren. Angenommen, Sie rufen dekorierte Funktionen auf, die wiederholt durch Gasgeben / Entprellen zurückgegeben werden ...
- Gas : Die ursprüngliche Funktion darf höchstens einmal pro angegebenem Zeitraum aufgerufen werden.
- Entprellen : Die ursprüngliche Funktion wird aufgerufen, nachdem der Aufrufer nach einer bestimmten Zeit den Aufruf der dekorierten Funktion beendet hat .
Ich fand den letzten Teil der Entprellung entscheidend, um das Ziel zu verstehen, das damit erreicht werden soll. Ich fand auch eine alte Version der Implementierung von _.debounce, die das Verständnis erleichtert (mit freundlicher Genehmigung von https://davidwalsh.name/function-debounce ).
// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
_.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);
};
};
Eine weit hergeholte Metapher, könnte aber vielleicht auch helfen.
Sie haben einen Freund namens Chatty, der 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 die ...
- Naiver Ansatz: Überprüfen Sie jede Nachricht, solange sie eintrifft. Wenn Ihr App-Symbol springt, überprüfen Sie. Es ist nicht der effektivste Weg, aber Sie sind immer auf dem neuesten Stand.
- Gasannahme : Sie überprüfen einmal alle 5 Minuten (wenn es neue gibt). Wenn eine neue Nachricht eintrifft und Sie sie in den letzten 5 Minuten jederzeit überprüft haben, ignorieren Sie sie. Mit diesem Ansatz sparen Sie Zeit, während Sie noch auf dem Laufenden sind.
- Debounce- Ansatz: Sie wissen, Chatty, sie zerlegt eine ganze Geschichte in Stücke und sendet sie in einer Nachricht nach der anderen. Sie warten, bis Chatty die ganze Geschichte beendet hat: Wenn sie 5 Minuten lang keine Nachrichten mehr sendet, würden Sie annehmen, dass sie fertig ist. Jetzt überprüfen Sie alle.