AngularJS 的弱项

当一项新技巧出现的时候,有时让我们着迷,而且让大家认为它一切皆有可能。##\

正如大家着眼到的,该项技术在一些地点超过我们的预期,大家初始相信大家得以相对不难地在其他地点使用该技术。可是实际上经验阐明:这几乎就是自找苦吃!大家
thoughtworks.com
技术团队利用 AngularJS 去贯彻 “interactive tech
radar
”,我当做内部的一员,谈谈自己的局地应用体会。

简单背景音讯

大家有一个 Ruby,Sinatra 和 Plain JavaScript
的技术架构。关于项目支出堆栈的背景消息,你可以在 Andy Robinson所写的文章中找到。引导标准的内部一项是,代码库的保安是通过最大限度地缩短意外的复杂性来兑现的。因而,结论就是,大家力求用库,而不是框架。一个实际事例就是选项
Sinatra 而不是 Rails,紧假如因为前端作为一个框架,比后者轻得多。

“interactive tech radar” 项目是用 AngularJS 落成的。选取 AngularJS
可以高速支付出最小可视化原型(MVP)产品,可以兑现更丰硕的客户端交互。比起大家事先充满文本的静态页面,最后产品的用户体验会有大幅度的擢升。

实战故事

敢于的熏陶出现在大家的创设阶段。AngularJS
的引入,明显增添了测试的日子。大家的测试工具集(RSpec,
Capybara,
PhantomJS)很符合大家明天支付的主次:多页面应用程序,一个页面里面唯有三三两两的(但会愈加多)JavaScript
交互。AngularJS
的引入,让大家一向面对一个妙趣横生的挑衅:大家怎么样去测试必要跨越七个页面进行JavaScript 交互的单页面应用?使用 AngularJS 特定的工具像
Protractor,意味着要引入一个新的测试工具集,和眼前的测试工具集一起互相工作。维护五个例外的测试工具集,扩张了复杂,而又宛如不会收获哪些好处。我们最终利用了
AngularJS 包容的测试工具集(例如
capybara-angular)。因而开端显示了拔取AngularJS 的一个瑕疵:不可以和非 AngularJS
特定的工具或其余编程库一起使用。

进去第二轮迭代时,越多的职能和谬误考订出现在劳作列表上。在我们早先解决那几个标题时,我们深感到了由学习曲线陡增所带来的压力。随着大家对
AngularJS
驾驭的无时或忘,即便较小用户故事也要开销好几天时间。即便大家对此已有预判,但仍低估了实际上所要开销的岁月。紧要缘由是,由于
AngularJS
框架的青城山真面目决定的。像别的其余框架一样,它有着自己特其他宇宙观。为了赢得行使框架的最大利益,使用者必须接受和选用它做事的点子。编程框架连接神奇和卓绝的

  • 帮你飞快完结MVP,但长时间来看,你不得不为此在代码的护卫和发展上付出必不可少的代价。

在工作中,大家平时发现,解决难点的唯一路径就是 AngularJS 提供的艺术。JS
库的采用被严谨限制了。平常,你只好利用属于其生态系统部分的 JavaScript
工具。例如,基于 jQuery 的库就不能和 AngularJS
打造的页面一起很好的办事。我们还发现,使用 JavaScript
做些不难的事体变得很不方便。一个例证就是使用 DOM onready/onload 事件(因为
AngularJS
胁制了那个事件,你不可以轻松地选用它们)。另一个例子是,谷歌(Google)分析无法直接与
AngularJS 一起干活,你必须拔取一定的 AngularJS 库才能使其运转(如
angulartics)。别的,AngularJS
给大家的代码引入了 html,那和大家拔取
slim
模板语言的目标一样。出现一组新的工具意味着伸张代码库的意料之外复杂性,那将使代码维护和衍变变得越来越困难。

我们的事体要求之一,就是让大家的网站对非 JavaScript
用户可用。那象征我们亟须复制大约所有交互信息(…破坏了 DRY
原则)所有这么些都在一个大的 noscript
标签内!咱们看看的此外一个题材是,AngularJS
提供的查找引擎优化方案并不精粹。有些解决办法当然可能更好(见
StackOverflow
上的问题AngularJS,),但它们都亟待额外的干活。

未来

对于 Radar
项目来说,大家所能预料到下一个标题将在言语国际化方面。那代表在
JavaScript 中落到实处国际化机制,必要复制当前大家在 Ruby
中已完毕的国际化。鉴于已有些痛楚经历,大家发现到,随着事情必要尤为复杂,继续使用
AngularJS
举行支付,大家将很难应对。在那或多或少上,就像未来或许的点子就是去除
AngularJS,使用 Ruby 页面和纯 JavaScript
来代替。即使那看起来像是一个高大的职务,工作量会在长期内飙升,但假设能管用重用现有的一部分
JavaScript 和 HTML 代码,也就是几天的工作而已。

结论

固然自己以为所有我们碰到的小标题都有更简短优雅的缓解方案,但它仍旧不可以更改这一真相,AngularJS
带来了无数奇怪的扑朔迷离,却从未为它交给而带来的附加的裨益。假诺本身付出一个单页面的
JavaScript 应用程序的话,我很乐于采纳和读书
AngularJS,但若将其看成其他方面,我会三思而后行。


作者:Mircea
Moise


Thoughtworks店铺的一名软件工程师,热衷
Ruby & 敏捷开发。

原文: AngularJS: The Bad
Bits

感谢:
Jodoo
帮忙审阅并形成查对。

P.S. 即使你喜欢那篇小说并且希望学习编程技术的话,请关怀一下
复唧唧

相关文章