Heim > Web-Frontend > js-Tutorial > Hauptteil

Funktionsdrosselung und Funktionsstabilisierung in JS (ausführliches Tutorial)

亚连
Freigeben: 2018-06-20 10:54:43
Original
1306 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Analyse von JS-Funktionsdrosselungs- und Funktions-Anti-Shake-Problemen vor. Er ist sehr gut und hat Referenzwert.

Frage 1: Wenn der Dom schleppt und Die Drop-Funktion ist implementiert, aber beim Binden des Drag-Ereignisses stellte ich fest, dass jedes Mal, wenn sich das Element ein wenig bewegte, eine große Anzahl von Rückruffunktionen ausgelöst wurde, was dazu führte, dass der Browser direkt einfrierte. Was soll ich zu diesem Zeitpunkt tun?

**Frage 2:** Wenn eine Schaltfläche an das Post-Ereignis der Formularübermittlung gebunden ist, der Benutzer jedoch unter extrem schlechten Netzwerkbedingungen manchmal mehrmals klickt, verursacht die Schaltfläche Das wiederholte Absenden des Formulars kann verhindert werden.

Um mit dem oben genannten Szenario umzugehen, sind die beiden Konzepte Funktions-Anti-Shake und Funktionsdrosselung entstanden. Im Allgemeinen:

Diese beiden Methoden dienen dazu, die Anzahl der Ausführungszeiten zu steuern die Funktion auf der Zeitleiste.

Funktion entprellen (debounce)

Konzept: Führen Sie den Rückruf n Sekunden nach dem Auslösen des Ereignisses aus, wenn innerhalb von n Sekunden ein weiteres Ereignis auftritt , wird ausgelöst, der Timer wird neu gestartet.

Beispiele aus dem Leben: Wenn jemand den Aufzug betritt (löst das Ereignis aus), fährt der Aufzug in 10 Sekunden ab (führen Sie den Ereignis-Listener aus) Zu diesem Zeitpunkt, wenn jemand den Aufzug erneut betritt (wieder innerhalb von 10 Sekunden). Auslösen des Ereignisses), müssen wir weitere 10 Sekunden warten, bevor wir beginnen (Re-Timing).

Funktionsdrosselung (Drossel)

Konzept: Geben Sie eine Zeiteinheit an. Innerhalb dieser Zeiteinheit kann es nur ein Triggerereignis geben. Der Rückruf Wenn ein Ereignis mehrmals in derselben Zeiteinheit ausgeführt wird, wird nur ein Ereignis wirksam.

Beispiele aus dem Leben: Wir wissen, dass ein aktuelles Sprichwort lautet: Wenn mehr als 24 Bilder kontinuierlich innerhalb einer Sekunde abgespielt werden, entsteht im menschlichen Auge eine zusammenhängende Animation, also im Film Aber ich weiß es jetzt nicht) wird grundsätzlich mit einer Geschwindigkeit von 24 Bildern pro Sekunde abgespielt. Warum nicht 100 Bilder oder mehr, denn wenn 24 Bilder den Anforderungen des menschlichen Sehvermögens genügen, erscheinen 100 Bilder als Verschwendung Ressourcen.

Analysediagramm

Gehen Sie davon aus, dass die Gesamtzeit unserer Beobachtung 10 Sekunden beträgt und 1 Sekunde als minimale Intervallzeit für ein Ereignis angegeben ist.

Wenn die Häufigkeit der Triggerereignisse 0,5 s/Zeit beträgt, dann ist die Anti-Shake-Funktion wie in der Abbildung dargestellt

Denn man kann nie warten für eine Sekunde, bevor es erneut ausgelöst wird, so dass am Ende keines der Ereignisse erfolgreich war.

Die Funktion Drosselung ist wie in der Abbildung dargestellt

Da sie höchstens einmal pro Sekunde gesteuert wird und die Frequenz 0,5 s/Zeit beträgt, ist dies der Fall ein Ereignis jede Sekunde ungültig. Die Endkontrolle beträgt 1 s/Zeit

Wenn die Häufigkeit der auslösenden Ereignisse 2 s/Zeit beträgt, dann ist die

Anti-Shake-Funktion wie in der Abbildung dargestellt

da 2s/Zeit
bereits größer als die angegebene Mindestzeit ist, wird es also alle zwei Sekunden ausgelöst.

Die Funktionsdrosselung ist wie in der Abbildung dargestellt

Ebenso ist 2s/Zeit größer als die Mindestzeitanforderung, sodass jeder Auslöser wirksam wird.

Anwendungsszenarien

Für die Funktion Anti-Shake gibt es folgende Anwendungsszenarien:

  • Fügen Sie der Taste die Funktion Anti-Shake hinzu, um das zu verhindern verhindert, dass das Formular mehrfach eingereicht wird.

  • Bei der AJAX-Verifizierung für kontinuierliche Eingaben in das Eingabefeld kann die Verwendung der Anti-Shake-Funktion die Anzahl der Anfragen effektiv reduzieren.

  • Bestimmen Sie, ob der Scroll nach unten gleitet, Scroll-Ereignis + Anti-Shake-Funktion

Im Allgemeinen eignet es sich für Situationen, in denen mehrere Auf Ereignisse kann gleichzeitig reagiert werden

Für die Funktionsdrosselung gibt es folgende Szenarien:

  • Aktualisierungsrate im Spiel

  • DOM-Element-Ziehen

  • Leinwandpinselfunktion

Im Allgemeinen eignet es sich für eine gleichmäßige Verteilung einer großen Anzahl von Ereignissen und durch die Zeit ausgelöst.

Quellcode

Funktion Anti-Shake:

function debounce(fn, wait) {
 var timer = null;
 return function () {
  var context = this
  var args = arguments
  if (timer) {
   clearTimeout(timer);
   timer = null;
  }
  timer = setTimeout(function () {
   fn.apply(context, args)
  }, wait)
 }
}
var fn = function () {
 console.log('boom')
}
setInterval(debounce(fn,500),1000) // 第一次在1500ms后触发,之后每1000ms触发一次
setInterval(debounce(fn,2000),1000) // 不会触发一次(我把函数防抖看出技能读条,如果读条没完成就用技能,便会失败而且重新读条)
Nach dem Login kopieren

Der Grund, warum eine Funktion zurückgegeben wird, liegt darin, dass die Anti-Shake-Funktion Shake selbst ähnelt eher einer Funktionsmodifikation, daher habe ich eine Funktionsänderung vorgenommen. Der Verschluss wird auch im Inneren verwendet, und die Verschlussvariable ist der Timer.

Funktionsdrosselung

function throttle(fn, gapTime) {
 let _lastTime = null;
 return function () {
 let _nowTime = + new Date()
 if (_nowTime - _lastTime > gapTime || !_lastTime) {
  fn();
  _lastTime = _nowTime
 }
 }
}
let fn = ()=>{
 console.log('boom')
}
setInterval(throttle(fn,1000),10)
Nach dem Login kopieren

Wie in der Abbildung gezeigt, wird eine einfache Funktionsdrosselung implementiert. Das Ergebnis ist ein Boom einmal pro Sekunde

Das Obige habe ich für Sie zusammengestellt. Ich hoffe, es wird Ihnen in Zukunft hilfreich sein.

Verwandte Artikel:

So fügen Sie einem Objekt in js ein Array hinzu

So erstellen Sie einen vollständigen Projektprozess mit gulp

Verwenden Sie Axios, um Dateien in Vue hochzuladen

So vergrößern Sie Bilder in JavaScript

Das obige ist der detaillierte Inhalt vonFunktionsdrosselung und Funktionsstabilisierung in JS (ausführliches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
js
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage