专访《AngularJS 2权威教程》做者Nate Murray:代码更像图表,须要多维度把握

本文仅用于学习和交流目的,不表明图灵社区观点。非商业转载请注明做译者、出处,并保留本文的原始连接: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 是文学化编程方面比较成熟的工具之一,但这些工具要求全部代码必须出现且以线性顺序呈现。这意味着用这些工具只能完成一小部分的应用程序,没法真正掌握整个结构。代码不是文档,更像是一个图表,你须要来回跳转。

  1. 译者注:文学化编程是由高德纳提出的一种编程方法,该方法认为编程就是用天然语言如英语,解释程序逻辑的过程。穿插宏和传统源代码的片断,生成可编译的源代码。

为了解决上面的问题,我最近开发了一款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也提供了很棒的视频课程。


更多精彩,加入图灵访谈微信!

图片描述

相关文章
相关标签/搜索