Heim > Web-Frontend > js-Tutorial > Hauptteil

Ausführliche Erläuterung der Beispiele für JS-Funktionsdrosselung und Anti-Shake

小云云
Freigeben: 2018-01-09 15:08:36
Original
2227 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Funktionsdrosselung und die Anti-Shake-Funktion vor, um ähnliche Anforderungen zu erfüllen. Ich hoffe, dass er allen helfen kann.

Bei der Front-End-Entwicklung lösen einige Benutzerverhalten häufig die Ausführung von Ereignissen aus, und leistungsintensive Verarbeitungsvorgänge wie DOM-Vorgänge und das Laden von Ressourcen können zum Einfrieren der Benutzeroberfläche oder sogar zum Absturz des Browsers führen. Funktionsdrosselung (Throttle) und Funktionsentprellung (Debounce) wurden ins Leben gerufen, um ähnliche Anforderungen zu lösen.

Funktionsdrosselung (Throttle)

Funktionsdrosselung besteht darin, eine Funktion so zu planen, dass sie nur dann ausgeführt wird, wenn sie größer oder gleich dem Ausführungszyklus ist, und Aufrufe innerhalb des Zyklus werden nicht ausgeführt. Es ist, als würde ein Wassertropfen fallen, nachdem er ein bestimmtes Gewicht erreicht hat.

Szenario:

  • Fenstergröße ändern

  • Scrollen

  • Verrückte Kaufklicks (Mousedown)

Erfolg:


function throttle(method, delay){
  var last = 0;
  return function (){
    var now = +new Date();
    if(now - last > delay){
      method.apply(this,arguments);
      last = now;
    }
  }
}

document.getElementById('throttle').onclick = throttle(function(){console.log('click')},2000);
Nach dem Login kopieren

Unterstreichungsimplementierung:


_.throttle = function(func, wait, options) {
  var context, args, result;
  var timeout = null;
  var previous = 0;
  if (!options) options = {};
  var later = function() {
    previous = options.leading === false ? 0 : _.now();
    timeout = null;
    result = func.apply(context, args);
    if (!timeout) context = args = null;
  };
  return function() {
    var now = _.now();
    if (!previous && options.leading === false) previous = now;
    //计算剩余时间
    var remaining = wait - (now - previous);
    context = this;
    args = arguments;
    //剩余时间小于等于0或者剩余时间大于等待时间(本地时间变动出现)
    if (remaining <= 0 || remaining > wait) {
      if (timeout) {
        clearTimeout(timeout);
        timeout = null;
      }
      previous = now;
      result = func.apply(context, args);
      if (!timeout) context = args = null;
    } else if (!timeout && options.trailing !== false) {
      timeout = setTimeout(later, remaining);
    }
    return result;
  };
};
Nach dem Login kopieren

Funktionsentprellung (Entprellung)

Funktionsentprellung ist, wenn die Funktion häufig ausgelöst werden muss, nur genügend Leerlaufzeit hat und nur einmal ausgeführt wird. Es scheint, als würde der Busfahrer darauf warten, dass alle einsteigen, bevor er den Bus verlässt.

Szenario:

  • Echtzeitsuche (Tastenbetätigung)

  • Drag and Drop (Mausbewegung)

Implementierung:


function debounce(method, delay){
  var timer = null;
  return function(){
    var context = this,args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function(){
      method.apply(context, args);
    },delay);
  }
}

document.getElementById(&#39;debounce&#39;).onclick = debounce(function(){console.log(&#39;click&#39;)},2000);
Nach dem Login kopieren

Unterstrich-Implementierung:


_.debounce = function(func, wait, immediate) {
  var timeout, args, context, timestamp, result;
  var later = function() {
    var last = _.now() - timestamp;
    if (last < wait && last >= 0) {
      timeout = setTimeout(later, wait - last);
    } else {
      timeout = null;
      if (!immediate) {
        result = func.apply(context, args);
        if (!timeout) context = args = null;
      }
    }
  };
  return function() {
    context = this;
    args = arguments;
    timestamp = _.now();
    var callNow = immediate && !timeout;
    if (!timeout) timeout = setTimeout(later, wait);
    if (callNow) {
      result = func.apply(context, args);
      context = args = null;
    }
    return result;
  };
};
Nach dem Login kopieren

Funktionsdrosselung (Throttle) und Function Debounce (Debounce) sind beide Methoden zur Verbesserung der Leistung durch Verzögerung logischer Operationen und gängige und wichtige Lösungen bei der Front-End-Optimierung. Sie können den Unterschied zwischen den beiden anhand von Konzepten und praktischen Anwendungen verstehen und bei Bedarf die geeignete Methode auswählen.

Verwandte Empfehlungen:

Detaillierte Erläuterung der Drosselung und Anti-Shaking von Javascript-Funktionen

Detaillierte Analyse der Entprellung und Drosselung von JS-Funktionen Stream_Grundkenntnisse

Die Bedeutung von Funktionsdrosselung und Anti-Shake

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Beispiele für JS-Funktionsdrosselung und Anti-Shake. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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