Angular 2.0 的设计方法和原则

转载自:Angular 2.0 的设计方法和原则

在开始实现Angular 2.0版本之际,我们认为应该着手写一些东西,告诉大家我们在设计上的考虑,以及为什么做这样的改变。现在把这些和大家一起分享,从而有助我们做出正确选择。

Angular 2 是一个针对移动应用的框架。它同时也支持桌面环境,但是移动端是难点,我们把它放在第一位。你了解并且喜爱的Angular还在那里,数据绑定,可扩展的HTML,以及专注可测试开发。

Angular 2 所有的设计文档都公开在Google Drive上。而这篇文档概括了我们的方法和设计原则,文中的一些链接指向特定的设计文档。

警告:我们仍然在Angular 2 的设计和原型开发阶段。所以这篇文中的有些东西可能会跟我们的最终产品不一样,甚至完全不存在。

为未来而设计

我们基于未来人们的使用方式而设计Angular 2。尤其,这意味着我们的针对是现代浏览器以及使用ECMAScript 6.

现代浏览器

现代浏览器是指那些“永远绿色”或者总是能自动更新到最新版本的浏览器。针对这些浏览器的开发让我们扔掉了很多深入篡改和变通方案,而这些正是让Angular的使用和开发更加困难的罪魁祸首。

目前这些浏览器包括Chrome、FireFox、Opera、Safari和IE 11。在移动端,我们的支持列表包括Android、IOS6+、Windows Phone 8+上的Chrome,FireFox移动版等。我们在研究对Android老版本的支持,但是还没有决定下来。

是的,现在仍然有很多老的浏览器在被使用,但是当Angular 2准备好的时候,我们现在针对的这些浏览器将会是主流,而且如你一样优秀的开发人员肯定已经在上面开发过一段时间的应用了。

ECMAScript 6+(设计

所有的Angular 2的代码都已经是基于ES6写的。由于现在ES6还没有在浏览器上运行,我们使用 Traceur编译器来生成能够在任何地方良好运行的ES5代码。我们正在和 Traceur 团队一起工作,实现对一些扩展的支持,比如标注(annotation)和断言(assertion)

不用担心,尽管Angular会基于ES6,但是如果你不想移植的话,你仍然可以使用ES5来写。编译器会生成可读性很强的JS代码,针对扩展也有可以理解的模拟实现。阅读设计文档来查看更多信息。

更快

更快的更新监测(设计

Angular应用是在DOM和JS对象的数据绑定的基础上构建的。Angular应用的速度很大程度上取决于我们底层使用的更新监测机制。当Object.observe()在Chrome M35上能用的时候,我们已经反复地说过我们多么希望能够使用它来加速我们的更新监测机制。当然我们会这么做!

然而,经过了非常细致的分析(细节见文档),我们还发现即使在浏览器还未支持原生更新监测的情况下,我们已经能够很大程度上提高Angular速度和内存使用效率。所以,极度平滑顺畅的应用指日可待。

仪表化(设计

性能杠杆的另一半就是你写的代码。为了这,我们会提供高精细度的计时细节来还显示你的应用中的时间花销。你可以把这个看成更新监测设计的一个目标,但是我们会通过一个名叫diary.js的新的Angular日志服务的来为计时提供直接的支持。

模块化

当我们发布 Angular 1.0 的时候,所有的功能是在一个“要么接受要么放弃的”单独包里。不管你用不用它,你都得承担每个部分的下载开销。尽管整个Angular对于桌面应用来说是非常小的,但是在移动设备上却是完全不同的情景。

我们注意到一件很有意思的事情是,当我们吧$resource分离成一个单独的库的时候,冒出了好几个非常有创意的替代品。

为了性能和提倡创新,我们的目标是将Angular几乎所有的部分都做成可选的,可替代的,甚至是可以在其他的非Angular框架中使用。你可以挑选和使用你喜欢的部分,另外的部分你可以自己实现或者使用其他你更喜欢的方案。

其他性能话题

尽管目前还没有设计,我们还会涉及很多Angular其他方面的性能优化。从使用预编译的模板来改进第一次加载时间到保证60帧每秒的顺滑动画,我们会在用户体验上做非常深度的调研。请帮助我们,告知我们应该关注的点,并在解决方案中给予我们技术上的支持。

更简单化

依赖注入(设计

依赖注入依然是 Angular 区别于客户端框架的关键所在,它帮你消除了很多应用中的连接性代码,并且使默认的可测试性变成了现实。尽管在我们开发应用的时候已经很享受依赖注入带来的好处,但我们对目前的实现仍然不满意。我们可以让他变的更简单且功能更强大。

我们会看到一个更加简化的依赖注入,移除了配置阶段,使用声明式的ES6+标注取代命令式的代码来简化语法。通过依赖注入和ES6模块化的模块加载的集成而获得更加强大的功能。我们还会看到使用子注入器(child injector)的方式来实现模块延时加载的特性。

上面文档链接中是我们的初步设想,但是它是Angular 2中你现在就可以尝试的部分。你可以在这个代码仓库中看到目前实现的细节。

模板和指令(设计

能够直接使用HTML来定义模板,以及扩展HTML的语法,这些都是Angular赖以生存的东西。我们对Angular 2 的模板编译器新增了很多高级的改进:

  • 简化指令的API
  • 支持与其他标准Web框架的集成
  • 提高性能
  • 允许IDE等工具对模板进行分析和验证

对上面的这些内容,我们非常激动,以至于迫不及待地炫耀它们。有太多优秀的东西而不能都在这篇概要中摘录,所以请直接跳到设计文档来查看更多内容。

更强大的功能

触摸动画(设计

用户们已经习惯于一些特定的触摸行为模式。比如,使用手指来滚动一个列表,循环查看轮播中的照片,通过滑动来删除一个列表项。然而:

  • 目前的对于轮播、无限滚动等的实现,都没有共享通用的核心代码,因此有一堆各种各样的冗余和差异。
  • 目前的大多数的实现对原生的滚动事件都不提供可选的支持,因为老的浏览器甚至一些现代的浏览器对它们支持不好。然而,这些实现,也就不能在新设备上达到本来可以有的最佳性能。

我们想给这些场景以最一流的支持,来让你的应用尽可能达到最佳的用户体验。

路由(设计

初始的Angular路由只为一些简单的用例而设计的。随着Angular的成长,我们已经渐渐的加入了一些新的功能。然而,底层的设计始终不适合做更多深层次的扩展。

我们非常关注一些已知的用例以及其他很多应用框架的路由的实现,这样我们才能交付一个简单而又可扩展的路由,能够广泛地适用于各种应用。

我们特别热衷于支持的一些用例包括:

  • 基于状态(State-based)的路由
  • 集成授权和认证
  • 选择性地保留一些视图的状态,移动端尤其需要。

持久化(设计

在Angular简陋的 $http 之上,很多开发者渴望一个更高层次的抽象来处理来自服务器端的数据以及浏览器的本地持久化存储。

移动应用需要在一个“一直离线”的模式下工作,通过同步与服务器端保持一致。RESTful服务需要的远比我们$resource提供的更多。有些数据需要能够批量更新,而有些需要持续的流连接。

在这个新的持久化层,我们会为这些情景提供干净的架构,如果需要的话会从当前的样板文件中剔除更多。

问答

什么时候能做完?

如果你和我们一起经历了 1.2 版本的发布,你应该知道我们也不知道答案。:)尽管我们现在才发表设计文档,但我们已经为很多模块做过了原型。依赖注入和Zone.js甚至已经可以使用了。所有的工作都会在GitHub上完成,我们也会继续发布每周会议记录,你可以一直关注。

Angular 1.x 到 Angular 2 的移植过程将是怎样的?

Angular 2 目前仍然在开发中,老实说我们也不知道。在我们的想象中,移植将会非常直接和简单,但是也不是不劳而获的。如何使用ES6的优势将是最大的工作重心。模板的更新几乎就是机械的查找和替换的练习。如果你的控制器中包含的是你的业务逻辑,而没有使用太多现有的Angular API的话,升级将会非常简单。最需要考虑的部分会是你对模块和指令的使用。

Angualr 2 会是 PhoneGap 或 Ionic框架等移动技术的替代品吗?

不是,Angular依然只是核心模块。你仍然需要使用其他的库,比如 Ionic框架来提供移动优化的 CSS/JS组件,PhoneGap之类的工具来打包和访问原生API。

Angular 2 和 AngularDart的关系是怎样的?

在将AngularJS向Dart语言移植的时候,我们运用所有我们学到的东西创建了一个新的Angular版本。这篇文档中讨论的很多改进已经在那里了,比如改良的指令的概念和语法,以及类和基于标注的依赖注入。

尽管这不是我们在 2 中要实现的目标,但它是对未来的一个很好的预览。

我们在打造AngularJS 2的同时,我们也会不断升级 AngularDart,这样喜欢Dart语言的人可以和喜欢JS的人享用到相同的好处。我们的目标是根据你选择的语言都会有一个单一的框架。

其他有趣的文档

时间: 2024-10-10 12:59:32

Angular 2.0 的设计方法和原则的相关文章

Angular 2.0 从0到1 (四)

第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节:Angular 2.0 从0到1 (五)第六节:Angular 2.0 从0到1 (六)第七节:Angular 2.0 从0到1 (七)第八节:Angular 2.0 从0到1 (八) 番外:Angular 2.0 从0到1 Rx-隐藏在Angular 2.x中利剑番外:Angular 2.0 从0

[转贴]有关Angular 2.0的一切

对Angular 2.0的策略有疑问吗?就在这里提吧.在接下来的这篇文章里,我会解释Angular 2.0的主要特性区域,以及每个变化背后的动机.每个部分之后,我将提供自己在设计过程中的意见和见解,包括我认为仍然需要改进设计的重要部分. 注意:本文所反映是2014年11月6日的状态记录.如果你在较长时间之后读到此文,请检查一下我设计上是否有所变更. AngularJS 1.3 在开始讨论Angular的未来之前,我们先花点时间看看当前的版本.AngularJS 1.3是迄今为止最优的Angula

Angular 1.0演变Angular 2.0的简单优势列举

首先,Angular最核心的4大特性分别是: 1.模块化 2.MVC 3.双向数据绑定 4.指令 Angular 1.0演变Angular 2.0的简单优势列举: 1.性能限制上的优化 说明:随着时间的推移,各种特性被加入进去以适应不同场景下的应用开发,在最初的架构受到了限制,而Angular 2.0很好的解决了这些问题. 2.仿照WEB后端的结构模式来编写前端 说明:支持模块.类.lambda表达式. generator等新的特性 3.支持移动端开发 说明:Angular1.x没有针对移动 应

Angular 2.0 从0到1 (六)

第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节:Angular 2.0 从0到1 (五)第六节:Angular 2.0 从0到1 (六)第七节:Angular 2.0 从0到1 (七)第八节:Angular 2.0 从0到1 (八)番外:Angular 2.0 从0到1 Rx-隐藏在Angular 2.x中利剑番外:Angular 2.0 从0到

Angular 2.0 从0到1 (七)

第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节:Angular 2.0 从0到1 (五)第六节:Angular 2.0 从0到1 (六)第七节:Angular 2.0 从0到1 (七)第八节:Angular 2.0 从0到1 (八)番外:Angular 2.0 从0到1 Rx-隐藏在Angular 2.x中利剑番外:Angular 2.0 从0到

All About Angular 2.0

angular All About Angular 2.0 Posted by Rob Eisenberg on  November 6th, 2014. Have questions about the strategy for Angular 2.0? This is the place. In the following article I'll explain the major feature areas of Angular 2.0 along with the motivation

Angular 2.0 和 1.x比较

奥斯本效应 Angular团队面临着这样的问题:如何在不影响1.x版本使用的情况下谈论很多2.0的高级新功能.这就是奥斯本效应,上个世纪80年代的电脑公司,终因市场源于而歇业后命名.简而言之,2.0版本听起来越好,就越少有人去使用1.x版本.不同的是,Angular 2.0版本已经可以从github上通过npm install [email protected]2.0.0-alpha.6 得到它了.但是,这个不能用于生产,它还在被大量的修改. Angular 1.x vs. 2.0 为什么Ang

Angular 2.0 基础:服务

什么是服务(Service) 在Angular 2 中我们提到的服务 service 一般指的是 哪些能够被其他组件或者指令调用的 单一的,可共享的 代码块.当然,通过服务可以将数据和组件分开,这样就可以实现更多的组件共享服务数据,服务能够使我们提高代码的利用率,方便组件之间共享数据和方法,方便测试和维护.在Angualr 文档中我们能看到这样的描述: Multiple components will need access to hero data and we don't want to c

Angular从0到1:function(上)

1.前言 Angular作为最流行的前端MV*框架,在WEB开发中占据了重要的地位.接下来,我们就一步一步从官方api结合实践过程,来学习一下这个强大的框架吧. Note:每个function描述标题之后的★标明了该function的重要程度(1~5星). 2.function(上) Angular封装了一系列公共方法,帮助我们更简单的使用JS.这些就是Angular的function. 2.1.angular.bind(★) angular.bind类似于Function.prototype.