2009年3月11日星期三

Javascript碎语

        Javascript离不开互联网的流行应用。它是由Netscape公司的Brendan Eich发明的,后来同Sun公司合作后就改名为Javascript。M$看到了互联网的巨大潜力后,也想在IE上用Javascript,可惜没有获得版权,于是自己除了JScript。当时由于没有统一标准,所以浏览器之间的不兼容问题非常严重。当两个公司提交给ECMA后,由于互不相让,所以只好把标准名称做ECMAScript,目前主要使用的标准是ECMA-262第三版本。其实目前我们听到的Javascript更多的是指浏览器中提供的Javascript引擎实现,但除了被用在网页中,ECMAScript还能被用于很多其他场景,比如ActionScript也是其繁衍的一个分支,只是Adobe公司对其进行了扩展,加入了Flash虚拟机的一些扩展支持。本质上来说,ECMAScript是一种语言规范,它的实现就是一种虚拟机实现或者解释器实现,而我们平时除了用核心语言之外,还常会用到一些浏览器附加的对象,比如DOM对象、各种插件对象等。浏览器之间的兼容问题主要是由这些附加对象的实现造成的,比如对事件的支持、对CSS的支持等,在不同浏览器中的具体实现有差异,但是核心语言的实现基本上是一致的。
        Javascript是一种解释性的语言,它是基于对象而非面向对象,因为它没有提供语言级别的面向对象相关技术,比如封装、继承、多态等,但是它是基于对象的,而且可以使用一些技术来弥补其语言在面向对象方面上的不足,比如可以使用closure来实现封装。
作为一种解释性语言,最大的缺点可能就是它的运行效率,但是目前的一些技术可以提供解决方案,比如JIT(Just-In-Time),它在代码运行前进行即时编译,使得代码在内存中能按照汇编码或者二进制码来运行,这对代码执行速度有很大提高。这方面Google和Mozilla都有相关研究,而且都有源代码开放,Google的V8是用C++实现,Mozilla提供了Java的实现版本Rhino。PS.有新闻说Opera将会开发出全世界最快的Javascript Engine——“Carakan”。可见当前Javascript在RIA中的地位。
        一开始有个疑问,为什么只用Javascript来做浏览器客户端脚本语言,为什么不是Python、Ruby等这类更强的OO语言?我看了一些论坛贴,发现以前也有人问过,主要原因在于安全,Javascript已经有对应的沙盒的实现,而其他语言并未有对应的沙盒实现,所以如果要改用其他脚本语言,第一件事情就是要制定一套机制,来确保他只能在规定的权限范围内使用。目前网上看到的一些APAX、ARAX基本上都是把Python、Ruby代码转换为Javascript代码,并不是真正实现了对应的浏览器脚本引擎。
        目前ECMAScript的发展方向主要是ECMAScript 262-3.1,也就是被M$和Yahoo支持的方案,而ECMAScript-262-4这个主要由Google、Adobe、Opera、Mozilla等公司支持的方案中的一些功能将被取消,具体可以参阅ECMAScript的Harmony项目。
最后说说RIA领域的现状。M$的SilverLight使用了JScript.net,算属于ECMAScript一类;Adobe的flash使用了ActionScript,也算是属于ECMAScript一类,PS.Adobe的flash引擎有个开源版本项目Tamarin,和Mozilla合作,目的是让Flash兼容ECMAScript-262-4标准;当然了,AJAX本身用的就是Javascript,属于ECMAScript一类;最后还有Sun的JavaFX,这一类使用的是自带的脚本语言,依赖于JVM。JavaFX的最大好处就是平台统一性,凡是Java的咚咚,全部基于JVM,但JRE太大,很难下载,不过Sun公司目前也有意要精简JRE的部署文件大小了,出了一些解决方案,先下载精简JavaFX用的JRE,然后再慢慢扩充JRE,且后续的Java版本可能会模块化;SilverLight的话不用多说,M$的产品:易用、文档齐全,但所依赖的.net目前并非跨平台(虽然有开源的mono,不过感觉和windows平台上的功能和性能都差远了),而且要$;Flash是目前最多人装的插件,基本上每台上网的机子都有装Flash,可见其用户普及度,而且Adobe公司目前的战略是要向电视网靠拢,实现互联网和电视网的联通,让Flash跑上电视,野心不小哇~虽然Flash引擎可能会被开源,但是一些通讯协议就不知道了。总的来说,Flash开发应该还可以,有面向程序员的Flex和设计员的FlashStudio,而且Flash源文件可以很好的保密,不用像Javascript一样被公开;AJAX也随着Web 2.0而热起来,在原有的基础上增加了异步传输,提高了用户体验,使得Javascript被再度关注,目前很多大公司和组织都在研究,比如Google、Mozilla,而Javascript代码的执行效率也越来越快,各种框架类库也像雨后春笋般出现,比如jQuery、ExtJS、YUI、Dojo……还有转代码工具比如GWT等,Javascript相比其他技术的优点可能是可以无止境的优化,比如缩短代码再压缩来减少传输数据量,但是总体感觉Javascript的门槛还是比较高,特别是要求写一些效率比较高的代码。
        目前还不能断定哪种技术有绝对的优势,但是从用户角度可以说我们的选择余地也越来越宽广:) 

参考:
  1. https://developer.mozilla.org/presentations/xtech2006/javascript
  2. http://en.wikipedia.org/wiki/
  3. http://ejohn.org/blog/the-world-of-ecmascript/
  4. http://www.ecmascript.org/
  5. http://www.mozilla.org/projects/tamarin/
  6. http://www.infoworld.com/article/08/06/23/eich-javascript-interview_1.html

没有评论: