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
劫持了这些事件,你无可知轻轻松松地运她)。另一个例子是,谷歌分析不可知一直跟
AngularJS 一起工作,你必须利用一定的 AngularJS 库才会而其运作(如
angulartics)。此外,AngularJS
给咱的代码引入了 html,这与我们应用
slim
模板语言的目的一样。出现同组新的家伙意味着多代码库的奇怪复杂性,这将设代码维护与嬗变变得越来越不方便。

俺们的事务需有,就是于咱们的网站对非 JavaScript
用户可用。这象征我们亟须复制几乎所有交互信息(…破坏了 DRY
原则)所有这些都于一个特别的 noscript
标签内!我们来看底另外一个题目是,AngularJS
提供的检索引擎优化方案并无优。有些解决办法当然可能重新好(见
StackOverflow
上的问题),但其还需格外的干活。

未来

对 Radar
项目来说,我们所能够预期到下一个题目将在语言国际化方面。这意味当
JavaScript 中贯彻国际化机制,需要复制当前咱们在 Ruby
中既实现之国际化。鉴于已有的痛苦经历,我们发现及,随着工作需要愈加复杂,继续采用
AngularJS
进行付出,我们拿充分不便对。在当时或多或少齐,似乎未来也许的艺术就是去除
AngularJS,使用 Ruby 页面和纯 JavaScript
来替。尽管这看起如是一个高大的天职,工作量会当缺乏日外飙升,但假如能够立竿见影重用现有的一些
JavaScript 和 HTML 代码,也就是是几乎上之做事而已。

结论

尽管如此我认为所有我们相遇的稍问题都有再次简短优雅的解决方案,但它还不克改这无异于事实,AngularJS
带来了不少竟然之繁杂,却尚未吗它交给而带来的附加的补益。如果本身出一个单页面的
JavaScript 应用程序的说话,我非常愿意采用与读书
AngularJS,但如若拿其当其他地方,我会三思而后行。


作者:Mircea
Moise

Thoughtworks商家的同一号称软件工程师,热衷
Ruby & 敏捷开发。

原文: AngularJS: The Bad
Bits

感谢:
Jodoo
帮助审阅并成功校对。

P.S. 如果您喜爱就首文章以希望学编程技术的语,请关注一下
复唧唧。

相关文章