这是「 NEXT Collections | Google I/O」系列的开篇。NEXT Collections 是NEXT 用户基于产品集的干货分享专栏。Google I/O 期间,我们约请和聚拢了 NEXT 用户中的 Google 工程师、海内 Android 顶尖开拓者,为大家分享和呈现关于 Google 的最干货信息与不雅观点碰撞。
文章的作者 CJ 是 Google 八年的资深工程师,现返国创办了在线协作文档「一起写」,这篇文章也是他与 geek 范的同事们在「一起写」协作完成的。点击 NEXT 产品集「Google 开源项目」,完全查看文中提到的技能与开源项目。
过去十几年来, Web 开拓技能从最初的纯 HTML 到 CGI、PHP / JSP / ASP、Ajax、Rails、Node.js,已经发展到了一个非常成熟的阶段。去年的 Google I/O,谷歌开拓者中央推出了关于 Web 开拓的最佳实践手册;而今年的 Google I/O ,「The Next Generation of Mobile Web」依然是个中的一个主要议程。
不过,古人栽树,后人乘凉。现在大家拷贝的代码可不是自己从土里自己长出来的,而是技能大牛一行行敲出来。即便是谷歌这样的互联网巨鳄,在 Web 开拓上也经历过无数的努力和踩过一个又一个的坑。今晚 Google I/O 正式开启之前,我就给大家讲讲这些事儿,聊聊从 Desktop 时期到本日的 Mobile 时期,谷歌 Web 开拓技能的变迁、踩过的坑。
| Gmail、Google Map : 天下疯了两次
大家知道,最早期的 web 开拓指的便是 HTML,CSS,JavaScript,很多刚毕业的学生就会说,“切,会写 HTML,JS, CSS 不算写程序, 会写 C++ 的才算”, 这可大错特错了。你们想想,写一个 C++ 程序只须要会一种措辞,写个 Web 运用得学三种措辞,而且这三种措辞还以一些神秘的、很多时候还没有文档的奇怪办法联系在了一起,再加上某些西北角的公司在里面再捣捣乱,导致 Web 运用非常的难以掩护,直接的后果便是 99% 的运用都是大略的网页加上一点点可怜的逻辑,完备无法取代桌面上的运用。
这个时候,英雄涌现了。Google 在 2004 年愚人节那天发布了一个叫做 Gmail 的东西,当时 email 的容量只有可怜的 10MB 或者 20MB,Google 溘然说供应 1GB 的邮箱并且不断增长,于是,全天下疯了。可是在大容量的背后,大家创造原来 Gmail 不仅仅只是大,而且让你以为你在利用一个桌面的运用,而不是一个以前传统的网页的运用。以是可以说,Gmail 是 Web 开拓的一个里程碑,第一个大规模支配的 Ajax 的运用程序。
紧接下来的一年,也便是 2005 年的情人节前后,Google Map 神奇般地涌现了,天下再一次疯了。所有人都以为不可思议,原来网页的程序可以做得那么酷炫,而 2000 年旁边科技泡沫壮盛期间的那些网站是多么的可笑。当时 Map 的组里面有 2 个人很值得一提,一个叫 Lars Rasmussen 的澳大利亚人,一个叫 Bret Taylor 的美国人,后面我们会逐步的提到。
| 重写 Gmail
在开拓 Map 和 Gmail 的过程中,Google 的工程师逐渐意识到一个高度构造化的JavaScript 库的主要性。由于逻辑越来越繁芜,代码量越来越多,功能也越堆越多,之前写得那些代码已经根本知足不了不断变革的需求了。于是伟大的工程师们做了一个 Googler 常常做的决定:我们重写吧。
一个伟大的重写 Gmail 的操持逐渐伸开了,也便是本日大家看到的 Gmail 的前身。在全体重写的过程中,一个高度独立、构造化的 JavaScript 的库被抽象出,这便是可能很多前端工程师们知道的 Google Closure。用本日的话来说,Closure 不是一个大略的 JavaScript 的库,他是一种方法论,一种情怀,以是任何拿 jQuery 和 Closure 相比拟的辞吐都是一种对 Closure 的侮辱。Closure见告大家,大家该当像写 java 一样的去写 javaScript,分清楚什么是一个类,什么是类的成员变量,什么是成员方法,什么继续,什么是接口等等...所有你熟习的面向工具的观点都可以在 Closure 里面找到。Closure 的涌现极大地改变 Google 内部写 JavaScript 的效率,导致繁芜的 Ajax 的运用如雨后春笋一样在 Google 内部迅速涌现。
| 聪明人太多的产物:奇葩技能 GWT
如果让 Google 的工程师们自己找 Google 一个不好的地方,一定有一点,那便是聪明人太多,没法管理。就在 Gmail 风起云涌重写的时候,其余一个团队在悄无声息的做着其余一个类似的努力去改变 Web 开拓,那便是 2006 年发布的 GWT(Google Web Toolkit)。这是一个无比奇葩的技能,程序员写的代码是 java,出来的是 JavaScript,就像你吃的是草,挤出来的是奶一样。这个技能的根本目的和 Closure 是一样的,便是为了让程序员用写 java 的办法去写 Web 运用,只是他的办法更直接,连 JavaScript 都省了。实在事理也很大略,便是通过编译器在编译阶段把 java 转成了 JavaScript 代码。可是,这个技能有一个致命的缺陷:你想想,要有多麻烦才能在浏览器里面调试一堆由编译器生产的JavaScript 代码。于是无数的各种附加调试技能涌现,见告大家怎么去简化 GWT 的调试,但是都没有办理根本问题。GWT 的最大的好处便是如果你的网页是由标准的控件组成的,比如输入框、选择框、多选等,那么 GWT 会极大的简化你的代码量.便是由于这个好处,GWT 一贯活到了本日,由于 Google 最赢利的广告系统的前端是便是用 GWT 写的。可见,打算机措辞的天下也是看爹的哈哈。
2007,2008 貌似很沉着,Google 也没发布什么惊人的、大的前端产品和框架。事实上,他们并没闲着。Google 在那两年期间做了几个主要的收购,奠定了后面著名的 Google docs 的根本。
2009 年,在 Google 内部雪藏了良久的 Closure 库终于开源了,同时开源的还有一个对应的叫做 Closure Compiler 的东西,一样平常人理解 Closure Compiler 不便是其余 jQuery Minifier 嘛,实在可没那么大略,Closure 的 Compier 是可以真的理解你的 JavaScript 代码的类型的。通过一个叫 JsDoc 的注释形式的语法,你可以完备地把 JavaScript 当做是一种强类型的措辞来写,并且有一个编译器来帮你查错。在强大的工具面前,jQuery 被无情地碾压。在接下来几年,Google又陆陆续续的发布了对应的 Closure 的模板措辞,和对应的 Closure Stylesheet 编译器,于是 Web 的三件套,HTML + JS + CSS 在 Closure 的天下里都有了对应的工具,在 Google 内部,大部分的前端项目也都是基于这套工具来开拓的。
与此同时,GWT 的小组也没闲着,一方面更好的支持 Google 最赢利的广告系统前端;一方面默默的憋了一个超级大招 -- 大名鼎鼎的 Google Wave。对,Google Wave 是用 GWT 写的,Wave 的 founder 便是我们前面提到的 Map 的创始人 Lars 。
| 又把最赢利的广告系统重写了一遍
2011,2012 的 IO 上,关于 web 开拓的主题很多都是基于 GWT 、Closure 展开的,一贯风平浪静地到了 2013 年。但与此同时,Google 内部已涌现了一股暗黑势力,悄悄地开拓了一个完备颠覆式的前端框架 -- AngularJS 。它,便是以HTML 标签起始符形状命名的 AngularJS,简称 Angular。颠覆在哪呢?Google 的 web 前端开拓框架基本采取著名的 MVC (Model-View-Controller) 构造,有效地分离数据模型和末了显示的视图,使代码更清晰、更随意马虎掩护。起先的 MVC 大都是在做事器端实现的,包括先条件到的 GWT 神器。但是 AngularJS 不一样,是一个完备在客户端也便是浏览器里的 MVC 框架。这个框架在 HTML 中标注新的属性,运行时用 JavaScript 动态解析和绑天命据关联,简化了 web 运用尤其是单页运用 (single-page application) 的开拓。不少数据双向同步逻辑乃至不用手工编写 JavaScript 就能实现了。更主要的是它制订了一整套前端组件的开拓规范。虽然各种繁杂的条条框框让它无论在 Google 内部还是开源社区都备受微词,但它还是迅速得到很多企业的青睐,近几年来以异军突起之势成为浩瀚公司招募前端程序员的一项标准需求。于是猖獗的程序员们又疯了,开始把很多迂腐的系统用 Angular 重写,包括前面提到了那个最赢利的广告系统前端。乃至Angular 一出来的时候就有人预测,Angular 便是早期的 HTML6 。
| 异类措辞的出身
说到这里,不能不提一个异类措辞了,叫做 Dart 。这个 Dart 可是出自名门,是由 V8 的首席程序员 Lars Bak 在他事情之余发明的, 他一边改进 V8 的性能,一边琢磨如何能打破 JavaScript 措辞本身诸如弱类型等限定,让 web 程序实行速率更上一层楼。他末了决定,干脆摆脱 JavaScript 的束缚,重起炉灶设计一门全新的、为新时期 Web App 专门打造的措辞 -- Dart。
在理解 Dart 前,大略科普一下同父同母的兄弟 V8。 Google 的 Chrome 浏览器当年发布时以其远超 Internet Explorer 和 Firefox的网页渲染速率震荡了天下。个中一个核心上风就在于全新的 V8 JavaScript 引擎。当竞争对手还在吭哧吭哧阐明实行 (interpret) 网页中的脚本时,强大的 V8 引擎采取即时编译 (JIT) 技能把 JavaScript 的运行速率提升到了一个全新的层次。在之后的几年里,各家浏览器厂商纷纭效仿,推进了全体 Web 平台的发展。目前深受追捧的 Node.js / io.js 实在也都是 V8 开源后的衍生产品,造就了一个前后端用同一种编程措辞的新兴开拓生态。
Dart 措辞借鉴了广大程序员熟习的 Java 语法,支持面向工具、单继续、interface、泛型、非逼迫的类型标记等措辞特性。Dart 的虚拟机在 V8 大牛的打造下性能当然也是超强的。Dart 程序还能被编译成 JavaScript,运行在没有 Dart VM 的环境中。
然而,Dart 从发布日起一贯倍受争媾和质疑。它被认为是一项分裂 web 之举,而且长期以来没有得到任何其他浏览器厂商的支持。2015 年初,Google 宣告取消将 Dart VM 绑定在 Chrome 浏览器里的操持。不过这并不是 Dart 的去世刑讯断。Google 仍旧支持并利用 Dart 开拓大型 web 运用,由于比起 JavaScript,Dart 更能提高开拓效率和担保代码质量。
综上,大家可以看到,web 在开拓上两个趋势,第一个是从脚本措辞层面去改进代码的质量,提高效率,第二是从 web 标准入手,供应更多抽象的模块化的组件,让编写 web 运用更加随意马虎。
而说到第二点,不得不提提 Google 的一个项目叫做 Polymer ,如果你们去 Polymer 的网站,你会创造 Polymer 的口号是「leverage the future of web platform now」。 的确,Polymer 是一个库用来实现 Web component 的,而 web component 是 W3C 关于下一代 HTML 的一个标准,这可是根正苗红的一个项目。可以说 Polymer 项目的进展某种程度上就代表了下一代 HTML 标准制订的进展。让我们一起期待在本次 IO 上 Google 会对 Polymer 做出若何的更新吧。
「 NEXT Collections | Google I/O」系列将持续更新,请保持关注。你也是一枚 Googler 或 Android 开拓,并且有话要说?对文章不雅观点有质疑?想加入 Google 工程师和 Android 开拓大牛的线下谈论?欢迎邮件 xinyuan@36kr.com。文章作者的新项目「一起写」也在招聘 geek 范的同事,欢迎简历快递至 CEO 直聘邮箱:c@yiqixie.com。
原创文章,作者:馨苑
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
作者
欢迎专心练剑的产品人和技能宅来聊:xinyuan@36kr.com :)
文章评论(3)