闭包权威指南翻译 -前言

来源:互联网 发布:我想做淘宝兼职 编辑:程序博客网 时间:2024/06/05 05:47

在网上发现一本讲述google的js库的电子书,只有英文版,闲着没事,慢慢翻译一下放在这里,以后回头看。。。。


前言

我现在在曼哈顿,坐在一个靠西的阳台边,和几个人在一起享受着一杯温暖的威士忌。Michael Bolin也是我们中的一员。他写了这本书。现在他正在忙着google的工作。我是我们这个JavaScript 优化器(后来改名为闭包编译器)的技术领导,Michael没有和我们聊JavaScript优化器,他也不想和我们聊他最痛恨的威士忌,他想和Julie讨论JavaScript驱动的文字编辑器。


在第9章中你将看到对Julie的介绍,但现在,你只需要知道她是在浏览器中实现文本编辑器的专家即可。


Michael发现,当你用浏览器管理一些任务列表时,你想加入一些功能到你的纯文本编辑器中。你可能想对重点的单词加粗,或者想要用键盘快捷键将光标从一个任务项移到另一项中。他不想实现一个完整的编辑器。他仅仅是想在浏览器提供的功能上作一些调整,这想能让用户的体验不会有太大变化。但是,怎样才实现这样这样的功能呢?


Julie解释说,要实现这功能有很多很多选择。“你用过textarea控件吗?” “你用过contentEditable 区域吗” “实现富文本控件功能你要依赖浏览器吗?” “你将要用javascript实现粗文字功能吗” "你怎样确保光标在右边线结束,对每个浏览器实现不同的光标选择功能吗?" “你将要把这个编辑器放在一个iframe中来和页面中的其它部分隔离开吗?” "你现在有相关的代码可以重用吗?"


你并不想随意地实现这些功能 。他们中有很多地方需要用复杂的方式调用深奥的浏览器API。这些API大多数都有bug,并且文档很少,或者根本没有很好地优化,对其中一些API直接查看源代码比看文档更简单。


你将从本书中找到大多数这些问题的答案。但是你从中学到更多也更有趣的是在ajax应用中重用代码(将大问题平台地拆分为小的子问题)。


你怎么样共享javascript代码?你怎么组织大量的通用javascript代码?你怎么样实现一个团队需要全部功能的代码,而另一团队为了给用户更小的负载因而只想订制其中的一部分功能?


Closure工具就是为解决这些问题而设计的。这只是很保守地说的。这些问题在设计中是非常核心的。许多工具朋友从gmail开始的。Gmail也是从一个小的javascript应用开始的。然后他们添加索越来越多的功能,并看着它一步步失去控制并难以维护。Frederick对巨大的程序系统有一个很著名的描述 “这是个沥青坑,有很多野兽在里面挣扎着”,像javascript这样的高动态性的程序语言,其中几乎所有东西都是可变的,因此没有标准方式做语法检查,这沥青坑很快就会被一小群的开发者吸干。


Closure工具尽量将这些混乱部分限制在闭包中。它们要求严格的命名空间和类声明。采用ECMAScript 4的类型语言作为拼写规范。编译器开发者声明变量,否者将发出警告。Closure工具尽量添加一此结构到语言中。许多google工程师也觉得这些结构很有用,并且在些基础上开发他们的产品。


很长时间里,Closure 工具仍有所有权。但是这不是真的,编译器和类库都是被设计为开源项目。更重要的是,他们最先被设计用来开发google应用,然后再开源,因此发布正式版会有所延后。


你曾经发布过项目吗,几个工程师曾发布过Closure编译器。最终放弃了。太困难了。它分为两部分,首先,你必须用ant等工具编译代码,并去掉非开源依赖,然后重写那些你不能去掉的依赖。第二,你必须写一个文档。


你可以想像当Michael每一次到我办公桌前和我谈论开发Closure编译器开源工程的时候我有多怀疑。那是2009年的事了。就“公开发布Closure编译器”这一条就让要有一半气馁了。我们为此花了一个月时间,感觉好像无法完成了。其中我也耽误了一些时间,比如看一些笑话书或打扫我的房间。


很明显,最终Michael还是通过他的努力成功的发布了这个编译器。我认为这是和他的固执和好问分不开的。当然,Michael首先是一个web用开发者和开源工程师。因此他帮助设计和开发了Closure编译器的web前端。纯粹意外的是,Closure Library,Closure Templates,和Closure Debugger也和他一起发布了。


使这代码可用仅仅是开放工程的第一步。主要的里程碑是第二步:文档。这本书中的内容之全,完全超过了开发此项目的任何一个工程师所知道的东西。我也让我的实习生不要烦我,直接去阅读这本书就可以了,直接把此书当成一个API文档。


你如果想要了解更多的内容,请关注Michael所讲的这个工具箱怎样使用及为什么要使用。Michael会告诉你怎么管理复杂的东西。这将会有许多陷阱和错误的开始。在此,Michael将要将提示你怎样避免这些问题。你也将学会构建你自己的工具和为你自己的大项目编译插件。


这仅仅是怎样开发你的富客户端应用的第一步,现在开始本书之旅吧!


                                                                                                                                                                                       -----Nick Santos

                                                                                                                                                Former Closure Compiler Tech Lead

0 0
原创粉丝点击