本文仅用于学习和交流目的,不表明图灵社区观点。非商业转载请注明做译者、出处,并保留本文的原始连接:http://www.ituring.com.cn/art...前端
Nate Murray
内特是一名全栈开发人员,编码工做从深度学习领域的图像识别到手机游戏的开发。曾供职于IFTTT,处理MapReduce,分布式计算,iOS应用程序和一些Web应用程序中的T级大规模数据集挖掘工做。最近和Ari Lerner、Felipe Coury、Carlos Taborda合著了《AngularJS 2权威教程》一书。git
除了编程开发以外,生活中玩音乐、养蜜蜂。github
参与开发了一款专为“喵星人”设计的游戏,该游戏被《纽约时报》《洛杉矶时报》《ABC 新闻》等多家报社报道并评选入围“前100款热门iPad娱乐类应用软件”。编程
此外,在Github上有不少的开源项目:后端
cascading-simhash浏览器
Smoker服务器
Similarity微信
Chordjerl数据结构
...架构
《AngularJS 2权威教程》堪称AngularJS 2领域的里程碑式著做,涵盖了关于AngularJS 2的几乎全部内容。
即便没有任何经验,本书平实、通俗的讲解,递进、严密的组织,也可让你毫无压力地登堂入室,迅速领悟新一代Web应用开发的精髓。若是你有相关的经验,本书对AngularJS 2概念和技术细节的全面剖析,以及引人入胜、切中肯綮的讲解,将帮助你完全掌握这个框架,在本身职业技术修炼之路上更进一步。
图灵目前正在翻译《AngularJS 2权威教程》,咱们有必要、也很荣幸请到合著做者之一Nate Murray,进行一期图灵专访。
对Nate而言,AngularJS意味着什么,它又有什么优点值得做者们为AngularJS写本专著?
Angular为编写和组织Web应用程序提供了美妙的框架。它基于组件开发Web,运用可伸缩、容易理解的方式编写易于维护的大型应用程序。过去咱们须要借助jQuery这样的库来读取和改变DOM,但这样的代码,众所周知,至关笨拙。然而,把代码拆分红组件能够将系统分解,每一个组件只负责视图的某个部分,整个应用程序也就更容易推出。
《AngularJS 2权威教程》是《AngularJS 权威教程》的升级版么?
不,这是一本全新的书。Angular 2 和Angular 1 在逻辑上有一致性,但它们的框架彻底不一样。《Angular2 权威教程》向读者介绍了一些新库,同时增长了做者们近些年来在Web开发方面的新认识。
在编写《AngularJS 2权威教程》的过程当中,4位(Ari Lerner, Nate Murray, Felipe Coury, Carlos Taborda)做者是如何合做的?你具体负责哪部分?
我主要负责提纲、调查、编辑和协调整个“写书项目”,差很少编写了一半的内容。Felipe Coury 一样贡献了大量的内容,他的工做很是的出色。多人合做著书的最大挑战应该是统一问题,幸亏咱们几人的追求一致,实际操做中并无太大的问题。
你怎么看待代码和文学的关系?
理想状况下,代码逻辑要足够清楚,不须要任何辅助文档。在被机器理解以前,代码要为人类提早理解,但实际状况告诉咱们,有些人并不适合一开始就学习代码库。
解决办法有不少,尤为是“文学化编程”1 领域。IPython/Jupyter 是文学化编程方面比较成熟的工具之一,但这些工具要求全部代码必须出现且以线性顺序呈现。这意味着用这些工具只能完成一小部分的应用程序,没法真正掌握整个结构。代码不是文档,更像是一个图表,你须要来回跳转。
译者注:文学化编程是由高德纳提出的一种编程方法,该方法认为编程就是用天然语言如英语,解释程序逻辑的过程。穿插宏和传统源代码的片断,生成可编译的源代码。
为了解决上面的问题,我最近开发了一款
cq
,借助CSS样式选择器提取代码片断到文档。在写《AngularJS 2权威教程》的时候,咱们就借助cq
有效减小了拼写错误和维护难度(咱们老是从磁盘上可运行的代码里直接加载须要的代码块)。选择器清楚地掌握代码结构,即便代码行号发生了变化,鲁棒性也不会改变。这固然不是代码和文学关系的最终解释,但对咱们的理解有很大帮助。
从您的简历介绍上,咱们得知,从2009年开始你一直从事大型数据挖掘工做。相信你必定能给图灵社区成员一些数据挖掘方面的建议。某些状况下,咱们须要在父做用域操做子做用域的数据,做用域间通讯的最佳实践是什么?是$broadcast/$emit/$on
吗?
你说的
$broadcast/$emit/$on
应该是指Angular 1。《AngularJS 2权威教程》主要关于Angular 2,并不包含这些,但下面的概念一样适用。在经典Angular里,
$broadcast/$emit/$on
绝对是做用域间数据传递的第一选择,但随着Angular的演进,咱们的思考方式和工具也都发生了变化。特定状况下,咱们能够根据如下三个方式来决定应用程序的数据结构:
经过包含EventEmitter 的服务管理状态;
若是你更喜欢Observables,采用RxJS并让组件订阅这些RxJS流的变动;
彻底摆脱$scope
,使用Redux。
Redux是近来新出现的一种有趣的数据结构模式,经过将数据存储在中央数据结构减小数据直接突变。这样,咱们就再也不须要调度action,把旧状态和action 传递给返回一个新状态的函数。我建议彻底放弃
$emit/$broadcast
和$scope
,借助Redux存储任何一个全新Angular项目的状态。
处理大型复杂结构的数据时,ng-repeat
有时会出现卡的现象,应该如何提升它的性能呢?
有一个好的办法是只显示必定的数量,而后循环利用DOM元素(而不是显示整个列表,并为每个建立DOM元素)。
假如重复可滚动容器中的一个div列表,你能够限制DOM中div的最大数量好比为100,而后等待容器元素滚动并填充div。设置这些须要大量的工做,但会获得更好的性能。
如今咱们来预测下Angular的前景。Angular有没有可能走进后端开发,成为一个相似Diango的后端开发解决方案?
就我而言,成为相似Diango或者Rails这样的后端开发框架并非Angular的目标。Angular自己是一个强大的前端开发框架,做用于浏览器的DOM,可以向任何API发出HTTP请求填充数据。
也就是说,Angular 2 这样的构建方式支持多个平台,尤为是移动开发平台。在Angular 2 框架下运用NativeScript或者Ionic建立移动客户端至关激动人心。
在服务端,Patrick Stapleton和其余贡献者为Angular Universal 也作出了很棒的努力。Angular Universal能够加速服务器运行和应用程序启动。理论上,它能为用户带来更好的性能体验。
Angular技术未来会直接封装进浏览器内部么?
这很难说,但极可能不会。若是可能,也是浏览器让Angular的某些功能再也不必要。Web组件就是一个很好的例子。浏览器支持的功能愈来愈普遍,最终使
@component
没有必要存在。浏览器还会提供变化检测,好比Zones ,这样咱们几乎能够看到浏览器实现Object.observe,Object.observe跟Angular的
$watch
很是相似。但它并无成为ECMA标准的一部分,很好。Angular 2 相对于组件有更多的功能,好比路径选择、依赖注入、测试框架,等等。虽然这些框架都很好,但任何框架都不能适合每一种状况,因此我也不知道它们会不会被封装进浏览器。
Angualr技术很强大却也复杂,能不能给初学者一些学习上的建议?
学习任何一种框架的最好方式就是用这种编程框架构建些东西出来。因此我建议初学者到Angular官网上学习文档,跟着教程学习。Angular 1 和Angular 2 官网上都有相关的介绍教程。
接下来,我建议初学者找到可以提供一步一步引导学习的示例代码源。我我的觉得《AngularJS 权威教程》和《AngularJS 2权威教程》就是很好的资源,另外Egghead.io也提供了很棒的视频课程。