谁说Angular.js是Google制造?

Posted 极客邦科技Geekbang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谁说Angular.js是Google制造?相关的知识,希望对你有一定的参考价值。


不去发现怎么会有惊喜,动动手指戳戳戳


很多人把Angular.js理解为“一个来自Google的项目”,不过这实在是一种容易引起误解的认知。恰逢前几日在Google I/O上听闻一些有关Angular与Polymer的讨论,于是把大会上Polymer 1.0的演讲和2014年ng-conf主题演讲的内容整理了一下,对这两个项目之间的关系进行一个梳理。



Angular诞生



2008年,当时已经在Google的Miško Hevery开始对Web应用开发感兴趣。当时的Misko已经在Sun、Adobe、Intel和几家创业公司积累了10年的工程师经验,但是javascript在当时还算不上是他的专长。之前的他可能写的最多的代码是Java(也写过Flex Actionscript),最关注的领域是“代码的可测试性”。他也关注敏捷,而他在XP和TDD方面的导师之一正是Adam Abrons(从年龄来看Adam可以算是Misko的老前辈了)。

开始研究Web开发的Misko对Web App的本质有了这样一种理解:世界上一切的Web App,难道不都是DOM(前端页面结构)+RAM(本地计算资源)+Data(后端数据服务)组合而成的东西吗?但这样对于前端Web开发者而言并不友好。我们为什么要在构建任何一个Web应用之前,不得不先去搞定后面的数据库、安全、持久层这些问题呢?Misko和Adam这对好基友于是在2009年做了一个个人项目:<angular/>。此项目的名称是Adam想出来的,Angular一词代表html标记语言当中的尖括号。这个项目的作用并不容易跟人解释,两人最后想出来的版本大概是这样的:

“云端的Excel,无需折腾数据库、安全和持久层,只需知道HTML和data-binding就能用起来的Web App开发方式!”


Angular的孵化期



两人最早对<angular/>的设想是将其作为商业软件供人使用。2009年9月getangular.com网站上线,该项目招揽到了第一批注册用户。同月,Misko在Google Group上建立用户群组作为沟通平台。在2009年剩余的3个月内,该群组里一共发布了18个主题帖,其中有12个是用户提问,3个是Misko的通告和反馈收集帖,还有另外3个是spam。对于这不同时间出现的用户提问,Misko一个不漏的在24小时内出现并进行了回复(确切的说,Misko会准时在每天的早上7-8点、早上11-12点、下午3点或者下午6点这几个时间点出现并回复邮件)。

这个时期的Misko在Google的本职工作是一个叫做Google Feedback的项目。Google Feedback为Google所有产品的用户反馈提供服务,当时这个项目的维护团队规模为3人(包含Misko),三个人在6个月的工程期间撰写了1.7万行代码。日益庞大的代码库逐渐让三人感到厌烦——尤其是Misko,因为他是个代码可测试性的信徒。Web应用原本是难以测试的,步骤繁琐,这让Misko无法忍受。

于是Misko去找到他的经理,Brad Green,请求重写整个项目。用什么重写呢?自然就是他的<angular/>啦。在Brad的支持下,Misko在三个星期内完成了重写,原本1.7万行代码缩减到了1500行。按照Misko的话来说,这就是data-binding的魔法。

这次尝试的成功让Misko和Brad十分兴奋。Brad鼓动Misko把<angular/>做成一个正式的Google项目,于是他俩去找更高级的Senior Engineer。Brad的团队当时在Infrastructure部门下,所以他们去找了Urs Hoelzle。结果Urs给他们泼了一大盆冷水:

“你俩根本不知道大规模访问的压力下这个东西会表现得如何。在我看来它是不会work的。”

于是<angular/>在那时没有正式成为Google项目。但是两个人并没有死心,而是“偷偷”的继续他们的工作——Brad称其为一种“constructive disobedience”(建设性的抗命)。


Angular的开源与发展



2010年2月,<angular/>演变成了开源项目Angular.js,选择了MIT协议。之后不久Adam逐渐淡出了项目,Brad和Misko则把Google Feedback团队的另一位工程师也拉入伙,以一个虚拟团队的形式运作这个开源项目。

这期间,一位叫做Igor Minar的小伙伴在Twitter上找到了Misko。两人都来自俄罗斯,都写过Java,都是代码可测试性的信徒,总之是各种投缘。于是当时供职于Sun/Oracle的Igor也被Misko拉入了这个虚拟团队,两人成了形影不离的好基友(几个月后Igor干脆全职进入了Google)。这位Igor是一个战斗力满载的超级工作狂,每天编码14个小时,Angular的git commit记录基本一直被他刷屏。此外,社区里的发布通告也都是Igor发布的,Angular的Twitter账户和IRC聊天室也是Igor创建的,不过在整个2010年,Angular用户群组中的61个主题帖主要还是Misko抢占的沙发。

AngularJS开源之后不久,发生了一件影响重大的事情。当时,已经被Google收购了三年的DoubleClick正在从.NET平台往Google平台迁移,整个产品要改造成single-paged app。按照当时公司默认的技术规范,Google内部跟Web有关的项目都是要使用Google Web Toolkits(GWT)的;但是,当时DoubleClick项目的负责人Marc Jacobs发现了Angular项目,认为Angular可能会更适合他们的场景。于是,两个团队私下进行了合作,结果就是Google DoubleClick成为了使用AngularJS构建的第一个大应用。这大大促进了Angular项目的成熟度,以及Angular在Google内部的认知度。

在这个势头下,Brad希望Angular能在2010年8月之前发布1.0版本(1.0这个版本号具有“生产环境可用”的重大意义)。但实际的工作量要远远超出预期——大约到了2011年5月,AngularJS 1.0才差不多完成。


Angular的火爆



这段时期,AngularJS的流行度开始上升。比较明显的是从Q3开始,各个会议上开始出现Angular.js的议程,网络上相关的文章教程开始增加。到了2012年,Angular开发者的招聘市场也开始活跃,有热心用户为Angular建立了Wikipedia页面,StackOverflow上也建立了标签。

Angular在Google内部的火爆反而要比外面晚一些。直到2013年10月,Angular团队才在Google内部举办了第一次主题会议,而这次内部会议获得了预料之外的关注:来自101个项目组的197位Googler参与了这次会议。大概也是在这时间前后,Google对Angular的投入开始慷慨了起来——团队终于有资金召开自己的大会ng-conf了。

截止到2014年初的第一届ng-conf,除去一开始的Misko、Brad、Igor数人,还有几位在社区活跃的Contributor被陆续招聘为全职Google员工,加上来自Google Maps、Youtube等项目的一些感兴趣的同事,Angular在Google内部形成了一个14人规模的核心团队(准确来说是13个人类和一个bot,bot是用来做自动化集成测试的)。同时,在这第一届ng-conf召开的时候,Angular的发展方向也有了一些微妙的变化。

其一,面向“未来浏览器”而全新设计的AngularJS 2.0。在第一届ng-conf上公布的AngularJS 2.0的规范中完全没有提及AngularJS 1.x的迁移计划,结果是这一公告反而遭受了大量开发者的质疑与愤怒。

其二,AngularDart项目的跟进。Misko在这一届ng-conf召开之前其实已经有大部分精力转移到AngularDart上了,所以他在AngularJS上的活跃度在2014年开始有所下降(无法再跟Igor一争高低啦)。

这两个变化中,AngularJS 2.0是一个非常具有代表性的变化。到底怎么算作面向“未来的浏览器”呢?这就不得不说到Web Components以及Google Polymer项目了。


未完待续……

版权及转载声明:


极客邦科技专注为技术人提供优质内容传播。尊重作者、译者、及InfoQ网站编辑的劳动,所有内容仅供学习交流传播,不支持盗用。未经许可,禁止转载。若转载,需予以告知,并注明出处。


以上是关于谁说Angular.js是Google制造?的主要内容,如果未能解决你的问题,请参考以下文章

Angular.js 提交表单的旧方式

如何使用 Angular.js 进行重定向?

Angular js 单页应用环境搭建

为啥 angular.js 在添加动态元素时不够聪明,无法编译 DOM?

谁说“IT 不理解 OT”?开放自动化来破局!

angular中ng-repeat是啥意思