534 Stimmen

Unterschied zwischen Drosselung und Entprellung einer Funktion

Kann mir jemand eine einfache Erklärung über den Unterschied zwischen Throttling und Debouncing einer Funktion für Zwecke der Rate-Begrenzung geben?

Für mich scheinen beide dasselbe zu tun. Ich habe diese zwei Blogs überprüft, um herauszufinden, aber ich habe immer noch Schwierigkeiten zu verstehen.

http://remysharp.com/2010/07/21/throttling-function-calls

http://benalman.com/projects/jquery-throttle-debounce-plugin/

1voto

CodeBiker Punkte 2367

Für Beispiele typischer Anwendungsfälle empfehle ich die Antwort von @Guy. Aber der beste Weg für mich, diese beiden Konzepte zu verstehen, war es, es auf Pizzen zu beziehen.

Angenommen, Sie sind ein erstaunlicher Pizzabäcker, und Kunden kommen ständig in Ihren Laden und verlangen mehr Pizzen.

Drosselung: Sie entscheiden, dass Sie nur am Ende jeder Stunde eine Pizza herausgeben werden, solange Sie mindestens eine Anfrage nach Pizza in dieser Stunde erhalten haben.

Sie erhalten 100 Anfragen nach Pizzen in einer Stunde, also geben Sie am Ende dieser Stunde eine Pizza heraus. Dann erhalten Sie in der nächsten Stunde keine Anfragen nach Pizza, also geben Sie keine Pizza heraus. Dann erhalten Sie 10 Anfragen nach Pizzen in der nächsten Stunde, und so geben Sie am Ende dieser Stunde eine Pizza heraus.

Entprellen: Sie ärgern sich darüber, dass Ihre Kunden ständig Pizzen verlangen, und beschließen daher, ihnen erst eine Pizza zu geben, nachdem sie eine volle Minute lang nicht mehr nach Ihnen gefragt haben.

Sie verlangen 30 Minuten lang Pizzen, hören dann aber für eine Minute auf zu fragen. Zu diesem Zeitpunkt geben Sie ihnen eine Pizza.

Dann verlangen sie 5 Minuten lang Pizzen und hören dann für eine Minute auf zu fragen. Zu diesem Zeitpunkt geben Sie ihnen eine weitere Pizza.

1voto

ItshakF Punkte 9

Es ist tatsächlich die Art und Weise, ein Ereignis zu begrenzen. Zum Beispiel, wenn Sie ein Ereignis onclick abhören, wird es bei regulärer Ausführung jedes Klicks, den Sie machen, abhören.

Wenn Sie Throttle verwenden, wird ein Intervall zwischen dem Zeitpunkt festgelegt, zu dem Sie das Ereignis abhören möchten, z.B. ein Klick pro Sekunde.

Debounce ist eine restriktivere Methode, denn es wird nur am Anfang oder Ende eines Ereignisses ausgelöst. Wenn Sie beispielsweise scrollen und Debounce verwenden, wird es nur ausgelöst, wenn Sie mit dem Scrollen beginnen und beenden.

1voto

Rajeev Punkte 11

Entprellen:

Führt die Funktion nach dem Intervall aus, wenn die Funktion nicht innerhalb dieses Intervalls aufgerufen wird.

Drosselung:

Führt die Funktion n-mal in festen Intervallen aus.

1voto

Der Hauptunterschied zwischen Debounce und Throttle besteht darin, dass Debounce eine Funktion aufruft, wenn ein Benutzer eine Aktion nicht innerhalb einer bestimmten Zeit ausgeführt hat, während Throttle eine Funktion in Intervallen einer festgelegten Zeit aufruft, während der Benutzer eine Aktion durchführt.

0voto

Johan Bergens Punkte 111

Dieser Artikel erklärt es ziemlich gut und hat auch Grafiken.

https://css-tricks.com/debouncing-throttling-explained-examples/

Aus dem Artikel (und mit einigen Erläuterungen):

Der Hauptunterschied zwischen throttle und debouncing besteht darin, dass throttle die regelmäßige Ausführung der Funktion garantiert, mindestens alle X Millisekunden.

Normalerweise ruft debounce die Funktion am Ende einer festgelegten Zeit auf und throttle ruft auf, wenn der erste Aufruf der gedrosselten Funktion erfolgt. Manchmal kann debounce eine zusätzliche Konfiguration umfassen, die dies ändert und den Aufruf am Anfang durchführt. Einige Implementierungen von debounce können tatsächlich das tun, was throttle macht (siehe Lodash-Quellcode), wenn sie mit spezifischen Konfigurationen aufgerufen werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X