本文仅用于学习和交流目的,不代表图灵社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接:http://www.ituring.com.cn/art...
Nate Murray
内特是一名全栈开发人员,编码工作从深度学习领域的图像识别到手机游戏的开发。曾供职于IFTTT,处理MapReduce,分布式计算,iOS应用程序和一些Web应用程序中的T级大规模数据集挖掘工作。最近和Ari Lerner、Felipe Coury、Carlos Taborda合著了《AngularJS 2权威教程》一书。
除了编程开发之外,生活中玩音乐、养蜜蜂。
参与开发了一款专为“喵星人”设计的游戏,该游戏被《纽约时报》《洛杉矶时报》《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也提供了很棒的视频课程。
更多精彩,加入图灵访谈微信!