Heim  >  Artikel  >  Web-Frontend  >  Eine kurze Einführung in die asynchrone Ausführung in JS

Eine kurze Einführung in die asynchrone Ausführung in JS

怪我咯
怪我咯Original
2017-07-07 14:57:521046Durchsuche

Der folgende Editor bietet Ihnen eine kurze Diskussion über die asynchrone Ausführung von js. Der Herausgeber findet es ziemlich gut, deshalb teile ich es jetzt mit Ihnen und gebe es als Referenz. Folgen wir dem Editor, um einen Blick darauf zu werfen.

1.JavascriptDie Ausführungsumgebung der Sprache ist „Single Thread“:

Vorteile: Es ist relativ einfach zu implementieren und die Ausführungsumgebung ist relativ einfach;

Nachteile: Solange eine Aufgabe lange dauert, müssen nachfolgende Aufgaben in die Warteschlange gestellt werden, was die Ausführung verzögert des gesamten Programms. Das häufige Nicht-Reagieren des Browsers (Suspended Death) wird oft dadurch verursacht, dass ein bestimmter Teil des Javascript-Codes über einen längeren Zeitraum ausgeführt wird (z. B. eine Endlosschleife), was dazu führt, dass die gesamte Seite an dieser Stelle hängen bleibt und andere Aufgaben nicht ausgeführt werden können.

Um dieses Problem zu lösen, unterteilt die Javascript-Sprache den Aufgabenausführungsmodus in zwei Typen: synchron (synchron) und asynchron (asynchron).

2. Mehrere Methoden der „asynchronen Modus“-Programmierung:

(1) Rückruffunktion : Der Vorteil besteht darin, dass es einfach, leicht zu verstehen und bereitzustellen ist, der Nachteil besteht jedoch darin, dass es dem Lesen und Verwalten des Codes nicht förderlich ist. Die verschiedenen Teile sind stark gekoppelt (Kopplung). die Programmstruktur ist verwirrend und der Prozess schwer zu verfolgen (insbesondere verschachtelte Rückruffunktionen), und für jede Aufgabe kann nur eine Rückruffunktion angegeben werden.

(2) Übernehmen Sie den ereignisgesteuerten Modus (Ereignisüberwachung): Der Vorteil besteht darin, dass es einfacher zu verstehen ist und mehrere Ereignisse gebunden werden können kann für jedes Ereignis angegeben werden Die Rückruffunktion kann „entkoppelt“ werden, was der Realisierung der Modularisierung förderlich ist. Der Nachteil besteht darin, dass das gesamte Programm ereignisgesteuert werden muss und der laufende Prozess sehr unklar wird.

(3)Beobachtermuster (Publish-Subscribe-Muster): Die Art dieser Methode ähnelt dem „Event Listening“, jedoch es ist offensichtlich besser als letzteres. Denn wir können den Betrieb des Programms überwachen, indem wir im „Message Center“ nachsehen, wie viele Signale vorhanden sind und wie viele Abonnenten jedes Signal hat.

3. Prozesssteuerung von asynchronen Vorgängen.

(1) Serielle Ausführung: Schreiben Sie eine Prozesssteuerungsfunktion und lassen Sie sie asynchrone Aufgaben steuern, nachdem eine Aufgabe abgeschlossen ist noch einer.

var items = [ 1, 2, 3, 4, 5, 6 ];
var results = [];
function series(item) {
 if(item) {
  async( item, function(result) {
   results.push(result);
   return series(items.shift());
  });
 } else {
  return final(results);
 }
}
series(items.shift());

Funktionsreihe ist eine serielle Funktion. Sie führt asynchrone Aufgaben nacheinander aus. Die letzte Funktion wird erst ausgeführt, wenn alle Aufgaben abgeschlossen sind. Das Items-Array speichert die Parameter jeder asynchronen Aufgabe und das Results-Array speichert die laufenden Ergebnisse jeder asynchronen Aufgabe.

(2) Parallele Ausführung: Alle asynchronen Aufgaben werden gleichzeitig ausgeführt und die endgültige Funktion wird erst ausgeführt, wenn alle abgeschlossen sind.

//forEach方法会同时发起6个异步任务,等到它们全部完成以后,才会执行final函数。
var items = [ 1, 2, 3, 4, 5, 6 ];
var results = [];

items.forEach(function(item) {
 async(item, function(result){
  results.push(result);
  if(results.length == items.length) {
   final(results);
  }
 })
});

Der Vorteil der parallelen Ausführung besteht darin, dass sie im Vergleich zur seriellen Ausführung, bei der jeweils nur eine Aufgabe ausgeführt werden kann, effizienter ist und Zeit spart. Das Problem besteht jedoch darin, dass es bei vielen parallelen Aufgaben leicht zu einer Erschöpfung der Systemressourcen und einer Verlangsamung der Betriebsgeschwindigkeit kommt. Daher gibt es eine dritte Methode der Prozesssteuerung.

(3) Kombination von parallel und seriell: Legen Sie einen Schwellenwert fest, und es können höchstens n asynchrone Aufgaben gleichzeitig parallel ausgeführt werden. Dadurch wird eine übermäßige Nutzung der Systemressourcen vermieden.

//变量running记录当前正在运行的任务数,只要低于门槛值,就再启动一个新的任务
//如果等于0,就表示所有任务都执行完了,这时就执行final函数
//最多只能同时运行两个异步任务。
var items = [ 1, 2, 3, 4, 5, 6 ];
var results = [];
var running = 0;
var limit = 2;

function launcher() {
  while(running < limit && items.length > 0) {
    var item = items.shift();
    async(item, function(result) {
      results.push(result);
      running++;
      if(items.length > 0) {
        launcher();
      }
    });
    running--;
    if(running == 0) {
      final();
    }
  }
}

Das obige ist der detaillierte Inhalt vonEine kurze Einführung in die asynchrone Ausführung in JS. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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