angular2理解VM转向和事件

时间:2016-08-05 07:29:12

标签: angular zonejs

我刚刚开始进入Angular2变化检测机制。

我已经阅读过关于这个主题的文章(有关ZoneJS和Angular2区域的文章),但仍然有一个术语我无法找到任何定义。< / p>

此处摘录自this帖子:

  

NgZone基本上是一个分叉区域,扩展了它的API并添加了一些   其执行上下文的附加功能。其中一件事   它添加到API是我们可以使用的以下一组自定义事件   订阅,因为它们是可观察的流:

     

onTurnStart() - 通知   在Angular的活动开始之前的订阅者。发出一个事件   每个浏览器任务由Angular处理一次。

     

onTurnDone() -   在Angular的区域完成后立即通知订阅者   处理当前转弯以及从中安排的任何微任务   转。

     

onEventDone() - 在结束VM事件之前,在最终的onTurnDone()回调之后立即通知订阅者。对测试有用   验证申请状态

我理解区域的概念并且它可以分叉,我唯一的问题是GROUP BYVM turn,我无法找到任何定义。

这些VM事件和转弯是什么?他们是ZoneJS,Angular或浏览器的一部分吗?

谢谢,Avi。

2 个答案:

答案 0 :(得分:8)

如果有人对这个答案感兴趣,这可以为我解决问题:https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/

当然,也请阅读Dylan Meeus给我的链接:What are zone turns?

这就是我现在所理解的这些术语的意思:

VM turn =浏览器任务 - 由堆栈清除时运行的某些浏览器事件循环(例如setTimout队列)处理的回调。

VM事件 - 浏览器处理所有待处理任务的操作。

Microtask - 正如上面链接的帖子所描述的那样,根据HTML规范,这些回调是由于性能原因(例如承诺和观察者)不应被安排为任务,所以它们被安排为一种称为微任务的东西。 微任务进入其自己的特殊队列,该队列在每个回调或任务结束时运行,这意味着如果任务调度微任务,该微任务将在该任务结束时运行,阻止当时在队列中等待的任何任务。 / p>

我希望这有助于某人:)

答案 1 :(得分:2)

自2.0.0-beta.10版本以来,onTurnStart,onTurnDone和onEventDone三个方法重命名如下(CHANGELOG.md):

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

新名字要好得多。