site topic网站专题
首页
>
网站专题
>
专题详情
分享新闻到:

是什么让我们爱上Javascript

互诺科技:2009-09-07 08:59     阅读数:       标签:

引子

过去,人们对于Javascript一直报着轻视的态度,人们认为它又慢又容易出错,而且在不同浏览器中解释也不一样,但是现在,Javascript确确实实的在改变我们的网络,越来越多的网络和APP应用开始使用Javascript。今天,我们就来讲讲我们为什么会有这种观念,回顾Javascript的历史来诊断他的现状,同时通过一些片段来表明Javascript同其他开发语言的本质不同,唯有如此我们才能明白为何Javascript这么重要。

早期的迷惑

从某种程度上来讲,Javascript是Java的恶魔兄弟(Java‘s evil twin)。他们同岁,都于1995年以Beta的版本出现,并且都在次年1996年推出了1.0版本。在语法上他们也很相近,从名称上来看他们就像是一家人一样。

我们第一次听说Javascript是在1995年,当时Netscape推出了Navigator 2.0的Beta版本,这个版本中没有包含Javascript,但是有对于Java Applet的支持。同时,Netscape 宣布页面内嵌的语言LiveScript。

这个声明并没有引起太多的注意,在当时Java Applet是一个热门的技术,当时对于为什么Netscape要在浏览器中内嵌两种语言也不是十分清楚,难道有什么事情LiveScript能做而Java做不了的么?

2个月以后,LiveScript看到了曙光,在Navigator 2.0B3中,它被重新命名为JavaScript。这次改动吸引了众多人的关注。“Oh,他肯定不能体现他的价值。”、“为什么Sun要让这么个玩具来搭Java的车?”我至今仍人为这次改名是一个失败的主意,因为他引起了无尽的困惑,很多非编程人员从来都没有明白过Java和Javascript是两个不同的东西。

改名字的另外一个影响是细微的,但是我认为改善了这个语言的接受程度。与Java的关系使这门语言看起来并不是一个全新的东西。事实上,当时Java本身都还不是十分成熟,也还没有到1.0,但是外界对于Java成熟状况的认知要比本身高出很多。例如,在1995年,时代杂志将Java选为当年的十大新产品之一。同时,市面上已经有很多关于Java的书籍。所以,当Netscape将这项技术命名为JavaScript,其意图很明显就是表明当时的Java开发团体是使用和评价JavaScript的最佳人选。

在怀疑的浪潮中,凭借JavaScript与Java Applet的通信和控制能力,JavaScript开始出现在一些应用中。所以,那些对Java感兴趣的人开始觉得有了学习JavaScript的必要。

Javascript就像一个玩具,它是面向对象的,所有的东西都是公有的,没有封装。另外,你无法创建真正的子类,在实例变量和方法之间并没有真正的区别,这就像一个灾难。你可以在任何时候将一个变量变成一个方法。在这方面我并不是孤独的,虽然对于面向对象的细节每个人的理解都有所不同,但是Java程序员几乎无一例外的认为,JavaScript并不是一门严肃的编程语言,我们也不像用它来做些什么。

附加的伤害

在早期的时候,JavaScript并没有什么真正的技术问题,它是缓慢又充满风险的,并且只在Netscape下工作。后来IE也支持了,但并不是完全兼容。人们吹捧他用来编写页面的applets,但是它并不能检测applet的失败。它从来没有被广泛的使用过,很快他就成为了一个分母,人们仅仅用它来完成那些可靠的任务,并且避免在其他的地方使用。

什么是JavaScript能够可靠的支持的?闪动的、基于图像的视觉效果。人们开始制造一些炫目的效果。Netscape引导了这个趋势,在页面中使用令人生厌的图层干扰了人们对正常内容的浏览。那些各种各样闪动、滚动的效果让我们认为《blink》这个标签简直就是网络的原罪。到处都充斥着闪动的Banner、滚动的Banner、状态栏里跳动的文字、随时可能弹出的对话框、。..各种各样的滥用还在不断继续。Miscorsoft也开始谈论DHTML,但是不久DHTML就变成了Buggy、Slow、Unmaintable网站的代名词。

对了,不要忘记安全问题。一般来讲,当你构建一个图灵完备(Turing-Complete)的编程语言时,你就需要特别小心安全问题。Netscape做的不够好,早期的Javascript中存在漏洞,而且花了很长时间才完全解决掉。

结果是什么?很多的有技术头脑的用户关闭了浏览器的Javascript支持。要知道,在1996年的时候可以被称为有“技术头脑(Technically Savvy)”的人员站的比重相当的高。所以,这些人便不再依赖于JavaScript,因为这会导致用户不使用你的网站。

那些使用JavaScript的用户做的也不够好。那些严谨的程序员完全抛弃了JavaScript,但是设计师和页面人员补充了进来。早期的书籍中都提供了糟糕的JavaScript实例,但是很少去从语义上对它进行分析、阐述。(David Flanagan是个例外)让事情更糟糕的是,有些人(也许是大多数人)根据就没从书中学习过JavaScript,他们只是从一个网站现有的代码中拷贝,修改,然后粘贴到自己的网站上让它工作,到最后都不知道为何这些代码能够正常运行。

即使大家都是从例子开始学习JavaScript,只要保证两件事情这也许会成为一个很好的策略。第一个就是大家都学习好的例子,但显然JavaScript并不属于这种情况。第二种情况就是这种语言应该和学习它的人所知道的另外一种语言相似,但是很不幸,虽然JavaScript从语义上看来和Java非常相近,但实际上JavaScript来自一个和Java完全不同的编程语言家族。JavaScript是NewtonScript、Self、Smalltalk.。.和Lisp语言的一个直系后裔。Waldemar Horwat,一位在JavaScript早期产生重大影响的工程人员说,我更愿意把JavaScript认为是Common Lisp的另一种形式。这个说法有些夸张,但是如果你知道这两种语言,你就会很容易发现两者之间确实存在很多相似之处。

所以状况就变的越来越不好,一门与之前广泛传播的语言有很大不同的新语言,被一些没有经验的编程者推广,其他的编程人员Follow了他们的例子。更多的用户基于安全考虑关闭了JavaScript的支持,还有有经验的程序员推荐大家避免使用JavaScript。

上面的这些还不够,浏览器大战似乎一触即发,儿JavaScript被选作了一种武器。战争中的双方都不断的发展JavaScript,有时候甚至故意引入了很多不兼容特性。JavaScript此时已经变得更庞大,但同时也更容易引起问题。

也难怪没有人会喜欢她。

帝国的重建

在那段时间,我还是不断听到更多关于JavaScript的消息。关于基于prototype和面向对象的特性的介绍总是让我很好奇,我曾经看到过的教材里从来没有提到过这些,也许是作者本人也没有必要的语言背景去将这些概念联系起来。同时,人们开始指出由于浏览器造成了多少错误,而不是JavaScript本身。

后来,IE赢了,Netscape投降了,这一阶段的浏览器大战结束了。Miscrosoft开始将他们的bug光芒覆盖到CSS领域(任何处理过IE6下页面开发的工程师都应该深有感受),而Mozila的团队则开始认真的考虑兼容性的问题。除了一些根深蒂固的区别,想要修改他们必须大量的修改源码,这个小组修复大多数的不同,于是IE和Mozilla/Firefox下的JavaScript变得更可控了。其他的开发者也更加的有迹可循。

JavaScript和浏览器的内置支持开始进入了一段稳固的发展时期。在我们大家都忙着写自己的JavaScript代码的时候,几乎没有人注意到一个具有传奇色彩的特性引入-XMLHttpRequest。最重要的DHTML特性,Ajax的重要部分,悄悄的加入到了IE中来。Microsoft的Outlook小组引入了这个ActiveX控件来使Outlook支持网络访问。200年的Ajax Experience的大会上,Dion Almaer和Ben Galbraith做了很多关于XMLHttpRequest的工作,但是在Mozilla第一次引入XMLHttpRequest支持的时候的官方文件中,他的特性根本就没有提到。

那段时间有很多JavaScript的活动,在JavaScript的支持下,Macromedia为Flash提供了脚本语言支持。Adobe也在不断努力使他们的很多程序可以使用JavaScript来控制和扩展。Apple将JavaScript嵌入了它的Sherlock应用中。当然,Mozilla项目也做出了一个重要决定,他们大部分的浏览器都可以支持JavaScript。很明显,JavaScript已经不再仅仅是一个网页语言,而成为了程序中嵌入的动态的、运行时扩展的编程语言的首选。其中的原因也许是当时大家或多或少的都会一些JavaScript,还有当时存在两个高质量的嵌入扩展(SpiderMonkey c语言编写,Rhino Java语言编写)。