Angular 源码翻译之zone

概述

Zone.js项目在js单线程(例如在浏览器主UI线程或是在单独的web worker线程)内提供了多个异步执行上下文.Zones是一种使用js事件循环的分割单个线程的方式.一个单独的zone不可以跨线程.了解zone的一种好的办法是它们在一个js线程内将栈分割成多个小栈,并将大的事件循环分割为多个小的事件循环,而且这些小的事件循环表面看起来是同时运行(但实际上共享同一个VM事件循环) 。

当你的应用加载Zone.js时,它修补了某些异步调用(例如setTimer, addEventListener)来实现zone功能.Zone.js为应用提供的回调函数添加一层封装,当一个timeout运行或者一个事件被检测到时,zone首先会运行封装层然后是应用的回调函数.执行中的应用代码块形成任务,每个任务执行在一个zone的上下文中.

Zones是按照层级结构排列的,它们在一些方面提供了有用的功能,例如错误捕获,性能测量并当进入与离开zone时执行已配置的工作项(这些有用的功能在当前web UI框架中变更检测的实现而言非常有意).

Zone.js对与应用代码是完全透明的.它在幕后默默工作.如果需要的话应用层代码可以调用zone并且在zone的管理下变得更加被需要.Angular使用Zone.js它的应用代码通常运行在一个zone内(尽管一个高级应用开发人员能通过使用NgZone类将一些特定的步骤移除在Angular zone的外部).

Project Information
Zone.js首页与源文件目录在

  • https://github.com/angular/zone.js
    接下来我们假设你已经将Zone.js下载到本地目录,我们会调用zone来熟悉它.

Zone.js使用ts编写.没有依赖任何包(虽然它有很多devDependencies,但是它的package.json有入口 "dependencies": {}).它的目录结构很简单,大小(未编译)约2mb.

Loading Zone.js
待续...

你可能感兴趣的:(Angular 源码翻译之zone)