2016-08-05 5 views
4

私はAngular2の変更検知メカニズムに着手し始めました。angular2 VMのターンとイベントを理解する

私はThoughramのブログ記事(ZoneJSとAngular2ゾーン)を読みましたが、まだ1つの用語がありますが、定義が見つかりません。

はここthisポストからの抜粋です:

NgZoneは基本的にそのAPIを拡張し、その実行コンテキストにはいくつかの 追加機能を追加するフォークゾーンです。ことの一つ それがAPIに追加されますが、カスタムイベントの次のセットである彼らが観察ストリームであるとして、我々は 、を購読することができます:

onTurnStart() - ちょうど角のイベントのターンが始まる前に 加入者に通知します。 Anglerによって処理されるブラウザのタスクごとに1回、イベント を発行します。

onTurnDone() - は角のゾーンが現在のターンとその ターンからスケジュール任意のマイクロタスクの処理 に行われた直後に加入者に通知します。

onEventDone() - 仮想イベントを終了する前に、最後のonTurnDone()コールバックの直後にサブスクライバに通知します。私はゾーンの概念を理解し、それをフォークすることができる 検証アプリケーションの状態

へのテストのために有用な、私が持っている唯一の問題は、私は任意の定義を見つけることができないため、VM turnVM eventです。

これらのVMのイベントとターンは何ですか? ZoneJS、Angular、または単にブラウザの一部ですか?

ありがとう、Avi。誰もがその答えに興味があるなら

+1

"Zone turnは1つのマイクロタスクのようです(コメントの中のGünterZöchbauer)" zone turns:http://stackoverflow.com/questions/37114478/what-are-zone-turns –

+0

基本的にZoneJSライブラリは、すべてのゾーンイベントを待ち行列に入れるキュー(例えば、NgZoneの場合は 'onTurnDone')?そして、VM /ゾーンターンは、その待ち行列からそのような保留中のイベントを1つ取り出して実行するプロセスです。 –

答えて

5

が、これは私のために物事をクリア:もちろんhttps://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/

、またディランMeeusのが私に与えたのリンクをお読みください。What are zone turns?

これは私が今、これらの用語の意味を理解するものである。

VM turn =ブラウザタスク - スタックがクリアされたときに実行される、いくつかのブラウザイベントループ(たとえば、setTimoutキュー)によって処理されるコールバック。

VMイベント - すべての保留中のタスクを処理するブラウザの動作。

マイクロタスク - 上記のリンクの記事で説明したように、これらはHTML仕様に従って、パフォーマンス上の理由(例えば、約束やオブザーバー)のタスクとしてスケジュールされていないコールバックであるため、マイクロタスクと呼ばれるもの マイクロタスクは、各コールバックまたはタスクの最後に実行される独自の特別なキューに入ります。つまり、タスクがマイクロタスクをスケジュールする場合、そのタスクの最後にそのマイクロタスクが実行され、その時点でキューに待機しているタスクはブロックされます。

私は、これは2.0.0ベータので誰か:)

2

に役立ちます願っています。10バージョンは、次のようにonTurnStart、onTurnDoneとonEventDoneが(CHANGELOG.md)と改名された三つの方法:

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

新しい名前がはるかに優れています。

関連する問題