2016-08-05 11 views
4

Ich habe gerade angefangen, in den Angular2 Change Detection Mechanismus zu gehen.angular2 Verstehen VM Turns und Ereignisse

Ich habe die Blog-Beiträge von Jeurram zu diesem Thema gelesen (die auf ZoneJS und auf Angular2-Zonen), aber es gibt immer noch einen Begriff, für den ich keine Definition finden kann.

Hier ist ein Auszug aus this Beitrag:

NgZone ist im Grunde eine gegabelt Zone, die seine API erweitert und fügt einige zusätzliche Funktionalität seiner Ausführungskontext. Eines der Dinge, es fügt dem API der folgende Satz von benutzerdefinierten Ereignissen, die wir abonnieren können, da sie beobachtbar Ströme sind:

onTurnStart() - Benachrichtigt Abonnenten kurz vor Angular Veranstaltung beginnt einzuschalten. Gibt ein Ereignis einmal pro Browser-Task aus, das von Angular verarbeitet wird.

onTurnDone() - Benachrichtigt Abonnenten unmittelbar nach Angular der Zone Verarbeitung des aktuellen Turn und alle Mikro Aufgaben aus diesem wiederum geplant erfolgt.

onEventDone() - Benachrichtigt Abonnenten unmittelbar nach dem finalen onTurnDone() - Callback, bevor das VM-Ereignis beendet wird. Nützlich für die Prüfung Validate Anwendungszustand

verstehe ich das Konzept einer Zone, und dass es das einzige Problem, das ich habe gegabelt werden kann, ist mit VM turn und VM event, für die ich keine Definition gibt.

Was sind diese VM-Ereignisse und -Wendungen? Sind sie Teil von ZoneJS, Angular oder nur der Browser?

Danke, Avi.

+1

„Eine Zone wiederum scheint ein Mikrotaskanalysierer (Günter Zöchbauer in den Kommentaren) zu sein“ Zone verwandelt: http://stackoverflow.com/questions/37114478/what-are-zone-turns –

+0

Also im Grunde die ZoneJS Bibliothek verwaltet eine Warteschlange, in der alle Zonenereignisse in die Warteschlange gestellt werden (zB 'onTurnDone' im Falle von NgZone)? Und ein VM/Zone-Turn ist der Prozess, ein solches ausstehendes Event aus dieser Warteschlange zu nehmen und auszuführen? –

Antwort

5

Wenn jemand in der Antwort interessiert ist, klären diese Dinge für mich: https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/

Natürlich lesen Sie auch den Link Dylan Meeus mir gab: What are zone turns?

Dies ist, was jetzt verstehe ich diese Begriffe bedeuten:

VM Turn = Browser-Task - Callbacks, die von einer Browser-Ereignisschleife (z. B. setTimout-Warteschlange) ausgeführt werden, die ausgeführt wird, wenn der Stapel gelöscht ist.

VM-Ereignis - die Aktion des Browsers, der alle ausstehenden Aufgaben behandelt.

Microtask - Wie im oben verlinkten Beitrag beschrieben, handelt es sich um Callbacks, die laut der HTML-Spezifikation aus Performancegründen nicht als Aufgaben eingeplant werden sollen (z. B. Versprechungen und Beobachter) Ding nannte eine Mikrotask. Eine Mikrotask tritt in ihre eigene spezielle Warteschlange ein, die am Ende jedes Rückrufs oder jeder Aufgabe ausgeführt wird. Wenn eine Aufgabe eine Mikrotask plant, wird diese Mikrotask am Ende dieser Aufgabe ausgeführt und blockiert alle zu diesem Zeitpunkt in der Warteschlange wartenden Aufgaben.

Ich hoffe, das hilft jemand :)

2

Seit 2.0.0-beta.10-Version, die drei Methoden onTurnStart, onTurnDone und onEventDone umbenannt wurde wie folgt (CHANGELOG.md):

NgZone.onTurnStart => NgZone.onUnstable 
NgZone.onTurnDone => NgZone.onMicrotaskEmpty 
NgZone.onEventDone => NgZone.onStable 

Die neuen Namen sind viel besser.