警惕Java,欢迎Javascript
最近Oracle控告搜索巨人Google,宣称其Android智能手机操作系统上的Dalvik虚拟机侵犯了Java专利,这很自然让很多的开 发人员感到担心。但大多数分析指出,这场诉讼对绝大多数Java开发人员将不会有多少的影响,但有些程序员却惊恐不安,他们已经开始寻找一种可替代的语言 了。如果你也是这样,你是否考虑过转向JavaScript?
“什么?”,你也许会诧异。任何一个开发人员或多说少都知道Java跟JavaScript几乎没有任何的关系。Netscape最初是想把这个跨 浏览器的脚本语言叫做LiveScript,但Sun微系统公司说服他们使用JavaScript这个名字——他们的想法是要把JavaScript当成 一种HTML和Sun的全功能的Java之间的桥梁。
但如果Sun漠视JavaScript的存在而认为Java将成为Web上的真正语言,那它就大错特错了。Java最终发现它的用武之地只是作为一种服务器端语言,JavaScript在浏览器里给了它致命打击。如今,像CommonJS和Node.js这样的项目把JavaScript扩展到了更广的地方,使它也能够扮演Java在数据中心上的传统角色。在这样一种神奇的角色转换中,JavaScript正在成为一种多才多艺的,强大的,功能齐全的Web语言,而Java却日益显现沦为昔日COBOL语言的结局。
桥接客户端/服务器端
估计经历了那个年代的人都能回忆起当时以浏览器为平台的Java applet的那种笨拙,丑陋,激不起兴趣的样子,它更多给人带来的是烦恼,而不是真正的用处。即使Sun最近的在富(rich)互联网应用技术的尝试 ——JavaFX,也没有使其在对抗其现有的竞争对手(包括Adobe Flash,微软Silverlight)的进程上前进多少。客户端Java,看起来在出生之日就已被判了死刑。
相似的,服务器端JavaScript(SSJS)也从来没制造出多少火花。早在1996年,Netscape Enterprise Server就支持SSJS,但它一种昂贵且有专利的产品。它很快就被开源的Apache server抢光了所有的市场,SSJS也随着它消失了。
然而,在那些日子里,JavaScript的确成为了最适合Web页面的轻量级脚本语言。对比一下那个时期新兴的其它语言,例如Perl和 Python,JavaScript运行缓慢而且语法怪异,只有有限的功能支持。更糟糕的是,每个厂商对其的实现还各不相同,导致开发人员浪费时间写一些 修改补丁和相关处理。
至今,JavaScript已经走了一段很长的路。独立的、开源的JavaScript引擎的出现——包括谷歌的V8,Mozilla的 SpiderMonkey,和WebKit的SquirrelFish Extreme——意味着任何人都可以在自己的代码里嵌入一个标准兼容的JavaScript解释器,无需你从头来开发它们。目前这三个项目正处在一场猛 烈的性能竞赛中,每种引擎的性能都在稳定的进步。随着这些底层技术高速的成熟发展,JavaScript展现出了一种Java从未实现的态势:打破传统的 领域壁垒,贯通服务器端和客户端。客户端的Java从未景气过,但服务器端JavaScript却杀了回来。.
服务器端JavaScript越来越受重视
现代的JavaScript引擎都能够单独的独立运行,这使得它们给SSJS提供了天然的便利。但目前JavaScript还只是主要的作为一种浏 览器端的语言,这使得它缺少一些开发人员们期望的在其它环境中的功能特征。例如,客户端的开发人员通常是通过互联网加载单独的.js文件,而服务器端的开 发人员需要一种更常用的方式,使代码程序能打成包。同样,JavaScript缺少常见的系统功能标准库,相比较而言,像C和Java这样的更加面向系统 的语言在这方面要丰富的多。
CommonJS项目正试图解 决这些问题。它的目标就是要创造出一套开放的、标准的API,提供诸如二进制对象处理,并行线程,文件、流、和套接字 I/O,系统日志处理等功能接口。除此之外,它还提议了一套代码和相关命名空间的模块格式标准。虽然这还是个很年轻的项目,但它的终极目标却是要让 JavaScript开发人员在写代码时有一个CommonJS规范,写出的程序在不作任何修改的情况下可以在任何CommonJS兼容的平台上运行—— 不论底层的JavaScript引擎和操作系统是什么。
然而,更令人兴奋的却是Node.js这个 项目,它和CommonJS的初衷很相似,而且实现了一些CommonJS API。可是,它却把SSJS的概念提升到了一个新的高度。它的最重要的一项革新就是实现了针对服务器端开发的面向事件的编程模型。这意味着不仅仅 Nodo.js编程会让客户端的JavaScript开发人员感觉到得心应手——因为事件驱动模型是他们的开发规范,同时对于那些严重依赖于并行操作来支 持多个并行用户的Web应用程序也是理想的选择。
如果这听起来像有一只手在向你招唤,请看看Node.js 编程例子。这个完全等效的“Hello,world!”程序是只用了6行JavaScript代码的完全的HTTP服务器端实现。
JavaScript:Web之王?
不要奢望JavaScript能把Java从唯我独尊的宝座上拉下来。CommonJS和Node.js都还有很多的功课要做,一种精确的对这两个 项目的描述应该是:试验品。对于更多的改进,例如特定的优化和管理工具等,就像Oracle对JRockit JVM所做的这方面的工作将会使Java成为企业软件开发的一个很有吸引力的平台。
然而,JavaScript作为服务器端开发语言所带来的好处显而易见。它能够让Web开发人员用一种单一的语法实现所有的程序,去除了典型Web 应用上的混乱和混淆。JavaScript的运行效率的改进日新月异,这是开发人员最看重的。而JavaScript语言本身也发展成熟,成为一种不错的 语言,具有同时支持面向对象和函数的编程风格的特征。
还有另外一点需要注意:JavaScript是完全免费和开放的,它由行业内厂商组成的ECMA标准委员会维护。ECMAScript工作组过去处 于停滞状态,但它已经克服了种种困难,使JavaScript继续得到高速的发展。而同时,Java,一边假装开放,有不伦不类的JCP(Java Community Process)负责,一边又受到Oracle潜在的法律诉讼的威胁。如果Oracle自己不能意识的现在的形势,那我相信开发人员们可是清清楚楚的看清 楚了。