由Lukas Ruebbelke所编著的《AngularJS in Action》一书是一本关于Angular版本1的实践性书籍。全书通过一个ToDo列表应用Angello展现了AngularJS的架构与组件。在AngularJS v2的Beta版本刚刚发布的这一时刻,InfoQ与本书的作者进行了一次访谈,谈及了从本书中可获得的知识,以及AngularJS现在与未来的发展方向。\

InfoQ:你能否为我们比较一下Angular与其他一些竞争框架的优劣,例如React?\

\

Lukas Ruebbelke:我认为“竞争”这个词用在这里有些不太恰当。React是一个优秀的渲染框架,它对于我们如何在应用中组织数据流起到了很大的影响。React所表现出的独到见解让许多框架停下了手头上的工作,并开始反思他们的方式是否正确。可以说,Angular团队与React团队之间的关系非常友好,我们乐于看到他们能够打破固有的思维,为我们带来新的思想。\

对于前端框架来说,如今正处于健康的发展道路上。因为我感到我们已经远离了那些有害的空话,不再使用“这个框架比那个框架好”的表达方式,而是意识到这一领域中还存在着大量的成长空间。我们与Ember CLI团队之间的互动就是一个良好的例子。\

让我用一些具体的术语详细地分析一下你的问题吧。React主要专注于视图的渲染,并且表现得非常出色。Angular则提供了更多的特性,内置了model、controller、directive以及animation等功能的实现。实际上,你完全可以用Angular打造应用的架构,而通过某个directive,让React承担起渲染的任务,这种做法并不罕见。

\

InfoQ:在你看来,我们是否应当在Angular 1.x版本的学习和开发上继续投入精力,还是应当等待v2的降临?我们知道v2对于v1的向后兼容性十分混乱,那么在过去几年间开发的项目今后将何去何从?\

\

Lukas:这一点完全取决于你适应变化的能力。我在所有新开发的Angular应用中都使用了EcmaScript 2015语法,并且将一切功能都分解为directive,它在Angular 2应用中的使用几乎是相同的。此外,我曾经倾向于使用factory以及纯粹的controller,但现在我完全转为使用service和controller as语法了,这种方式强制我使用EcmaScript 2015语法或TypeScript类。由于采取了这种正确的方式,对于这一问题的回答首次显得不那么迫切了。它在架构上表现了重叠性,让迁移过程变得平滑许多。从我个人来看,我已经开始喜欢新的风格了。\

Angular 1与2之间的问题主要是由发布的消息所引起的。当Angular 2初次宣布时,它听上去似乎颠覆了我们所知的一切。人们感到迷失了方向,因为感觉上好像完全无法从一个版本迁移至另一版本。在那之后,Angular团队已经很好地理清了现在的状况,而且实际上,这种迁移路径是完全合理的。举例来说,在Angular 1.5中引入了组件语法,以定义隶属于一个module中的组件,这就让我们能够更简便地以Angular 2的风格编写Angular 1.x的应用了。

\

InfoQ:当Angular v2发布之后,你是否计划开始为本书提供一个修订版本呢?\

\

Lukas:我已经开始着手于编写新版本了,新版本将进一步详细阐述本书的某些部分,同时引入一些新的章节,以描述一些新内容,例如测试。新版本还将涵盖一些架构模式,掌握了这些模式将能够帮助我们迁移至Angular 2。\

我同时也在为本书中所描述的示例应用Angello开发一个对应Angular 2的版本。等到恰当的时机,我们将找到一种最佳的方式以分享我们从这一过程中所学到的知识。我认为,为一个具有一定复杂度的应用同时创建两个版本是一种优秀的学习体验。

\

InfoQ:你能否进一步阐述一下Angular在性能上的开销,以及通过哪些方式能够在响应时间这方面带来性能上的提升?(注:例如单向或是双向绑定?)\

\

Lukas:当我对Angular应用进行性能审查时,我发现主要的性能问题来自于用户体验或是一般性的编程问题。有些时候,人们倾向于无视一些完善的架构性原则,因为JavaScript本身是非常松散与易于操作的。当人们问我如何成为更好的Angular开发者时,我总是让他们首先去阅读Robert C. Martin所编著的《代码整洁之道》。\

举例来说,你应当避免那些复杂的逻辑结构,他们或许内含业务逻辑,并以过程化的方式进行解析。如果你在Angular的digest周期中执行这些逻辑,那问题将变得更混乱。你还应当避免在一个页面中显示1万行数据,因为用户根本无法有效地处理这么庞大的信息。将所有这些信息堆积在一起是根本不可行的,而如果你为每一行数据又加入了数据绑定,那么事情肯定要乱套了。\

无论在任何应用程序中,当处理性能问题时,第一步都是对用户体验进行优化。接下来就要应用各种经过尝试的、真正的架构级原则,例如通过细粒度的、单一职责的代码单元组合你的应用程序。\

如果你需要,那么还可以尝试通过某些诀窍进一步提升应用程序的性能。如果你需要对某个复杂对象的集合进行绑定,我有时会选择将这些对象转换为轻量级的对象,其中仅包含需要显示的部分属性。如果你的视图不需要进行重绘,那么单向的数据绑定也是一种良好的优化方式。而为一系列元素项手动添加分页功能也能够起到优化作用。只要你能够减少在页面上所绑定的元素的数目和复杂度,就能够起到优化作用。\

我建议你观看Scott Moss在ngConf 2015大会上关于性能所做的演讲,他的这次演讲非常成功。

\

InfoQ:对于用Angular开发的复杂应用来说,掌握promise有多重要?\

\

Lukas:对于使用JavaScript开发的任何复杂应用来说,要充分掌握异步编程,对于promise的理解是非常重要的。Promise目前是一项非常重要的工具,但我相信Observable才是将来的发展方向,可以将其视为promose++。

\

InfoQ:你是否推荐使用Angular实现动画效果?\

\

Lukas:当然了!这也正是我最爱Angular的一点。其原因在于,Angular并没有采取直接处理动画的方式,而是暴露了一系列事件的钩子,从而可以任意选择你希望的动画应用方式。\

对于一些简单的效果,我可以通过使用CSS在3分钟之内搞定,它将改变整个应用的外面。如果我需要处理一些非常复杂的效果,那么我就可以选择利用这些事件的钩子,在其中编写大量的JavaScript代码。我是Greensock的忠实粉丝,通过这个库,你可以做的事几乎是无限的。在这方面,Angular能够配合任何库而表现得非常出色。

\

InfoQ:在现代的web应用中使用Angular有哪些优点与缺点?\

\

Lukas:最近三年以来,Angular是我的唯一选择。关于它的优点,我会选择它所带来的生产力。你可以选择利用Angular中预定义的功能,围绕着它实现你的特性,而又不会受到这些功能的限制。Angular能够充分发挥设计者-开发者的工作流,它对HTML进行了扩展,甚至为你提供了一系列工具,可以将你的HTML转变为一种自定义的领域特定语言(DSL)。由于依赖注入的存在,Angular鼓励你进行测试。而整个生态系统与社区的活跃也是有目共暏的。\

至于缺点,我只能想到一些边缘情况,你可能需要一些非常独特的功能,例如开发一个游戏或是3D渲染这种有些疯狂的举动。在这种情况下,Angular或许不是一种很好的选择,它无法解决所有问题。

\

InfoQ:在过去几年中,移动优先策略以及移动开发正在不断成长。能否方便地从Angular迁移至基于它开发的移动框架(例如Ionic、Mobile Angular UI等等)?你对于移动开发与Angular的应用有什么建议吗?\

\

Lukas:通过Ionic进行移动开发不需要你投入多少精力。我个人与Ionic团队有很好的伙伴关系,有一次我曾经问Adam Bradley,怎样能成为一人Ionic的专家。他告诉我,要成为一个Ionic专家,我只需要成为一个Angular专家就够了。这一点已经由我的经验无数次证实了。\

Angular Material是另一个在移动开发上表现优秀的项目,它为你带来了Angular的各种能力以及Material Design的美学观。无论是在何种设备或屏幕分辨率上,每个组件都能够完美地呈现。\

从这个角度来说,我有一种被宠坏的感觉。桌面开发与移动开发之间的界限已经越来越模糊了,因而Ionic与Angular之间能够良好地结合在一起。

\

InfoQ:你今后打算怎样参与Angular的项目,还有什么写作计划吗?\

\

Lukas:我十分喜爱Angular,或许我已经是这个框架最忠实的啦啦队长了。这个团队汇聚了众多我所认识的优秀人才,而他们又是如此亲切与宽容,我很荣幸与能这一项目联系在一起。\

我的脑海中已经浮现了大量有关Angular的内容与项目,一定会在某一天以某种形式发表这些内容的。

\

关于本书作者

\

Lukas Ruebbelke是一位全职web开发者,也是AngularJS社区中一位非常活跃的贡献者。\

查看英文原文:AngularJS in Action - An Interview With Lukas Ruebbelke

《AngularJS in Action》—— 与作者Lukas Ruebbelke的一次访谈相关推荐

  1. AngularJS in Action读书笔记5(实战篇)——在directive中引入D3饼状图显示

    前言: "宁肯像种子一样等待  也不愿像疲惫的陀螺  旋转得那样勉强" 这是前几天在查资料无意间看到的一位园友的签名,看完后又读了两遍,觉得很有味道.后来一寻根究底才知这是出资大诗 ...

  2. 《人类简史》作者尤瓦尔·赫拉利最新访谈:《人性、智能、权力和阴谋》

    引言 小伙伴们好,我是微信公众号<小窗幽记机器学习>的小编:卖锅盔的汉室宗亲.今天这篇文章主要根据尤瓦尔·赫拉利2023年7月17日接受访谈的视频(164分钟)内容整理而成,分为太长不看版 ...

  3. Ibatis in action 电子书

    电子书 是ibatis 项目组写的ibatis开发的权威书籍.现在只有电子版,目前使用Java作为描述的平台,这个书对于.NET和Ruby一样适用. 如果你的程序必须直接运行SQL语句的话,那前面两个 ...

  4. AngularJS资源整理收集

    AngularJS是Google开源的一款JavaScript MVC框架,弥补了HTML在构建应用方面的不足,其通过使用指令(directives)结构来扩展HTML词汇,使开发者可以使用HTML来 ...

  5. 最强AngularJS资源合集

    AngularJS是Google开源的一款JavaScript MVC框架,弥补了HTML在构建应用方面的不足,其通过使用指令(directives)结构来扩展HTML词汇,使开发者可以使用HTML来 ...

  6. 对话RTP作者Ron Frederick: 我非常期待QUIC的发展

    内容编辑:Alex 技术审校:刘连响 Ron Frederick 人物对话 #002# RTP和RTCP是处理所有多媒体传输的重要协议,于1996年1 月在RFC 1889中定义. 最近,LiveVi ...

  7. 阿里云专访Redisson作者Rui Gu:构建开源企业级Redis客户端之路

    摘要: 本文为阿里云同学在RedisConf2018上对Redisson开源客户端作者Rui Gu做的一个专访,主要介绍了Rui Gu参与开启Redisson客户端开发的历程,同时也详细介绍了Redi ...

  8. NeuroAI作者,冷泉港主任独家专访:忽视神经科学给我们的启示是愚蠢的

    神经科学究竟如何启发AI?不同路径如何殊途同归?智源社区采访了NeuroAI白皮书的第一署名作者,来自冷泉港实验室(Cold Spring Harbor Laboratory)的美国神经科学家Anth ...

  9. 转载老码农教你学英语

    作者微博:@老码农的自留地 对于咱们这些高端大气.时刻需要和国际接轨的码农,英语的重要性自然是毋庸置疑的.尤其是那些胸怀大志,想在码农行业闯出一片天地,成为秒杀身边小弟们的潜在大牛们,熟练掌握英语更是 ...

最新文章

  1. leetcode--买股票的最佳时机II--python
  2. 科达正式发布PPP业务支持计划
  3. GDCM:检查二个dicom文件的BigEndian错误的测试程序
  4. 如何在TypeScript/JavaScript项目里引入MD5校验和
  5. python期末题目_Python期末复习题必考
  6. P3160 [CQOI2012]局部极小值
  7. 川大计算机复试公平吗,看清华、川大这波操作,你还会担心网络复试会不公平吗?...
  8. linux考试试题及答案填空题,Linux认证考试试题及答案(20210511022419)
  9. html怎么让一行文字有滚动的效果,HTML标签marquee实现滚动效果
  10. 独立个人项目开发心得 - 任务切分、挑战性、实用性和半途而废
  11. 莫言2012诺贝尔奖颁奖词
  12. 母亲节板报图片计算机方案,母亲节电子手抄报图片大全
  13. 让两个Div并排显示的多种方法
  14. 关于React 行内样式backgroundImage的设置
  15. 企业高管离职后的竟业限制义务之设定
  16. 医学知识-DDR数字化成像-X平片
  17. 浮点运算量FLOPs与算力单位FLOPS
  18. umeditor+粘贴word图片
  19. 2021牛年一月营销活动指导方案
  20. Unity物理系统-物理材质-Collider碰撞体的弹力不够大如何处理

热门文章

  1. Android 显示、隐藏状态栏和导航栏
  2. android 记一次富文本加载之路
  3. JauntVR中文版登陆小米商店,首波内容有《五十度黑》
  4. Linux ALSA声卡驱动之六:ASoC架构中的Machine
  5. [转]sqlserver2008锁表语句详解
  6. influxdb java_身为Java程序员想拿高薪?这份分布式的pdf你一定不能错过
  7. Linux shell运行py文件提示command not found
  8. 深入理解 Java 内存模型(转载)
  9. 邓俊辉数据结构学习-3-栈
  10. CSharpGL(43)环境映射(Environment Mapping)-天空盒(Skybox)反射(Reflection)和折射(Refraction)...