提起JavaScript,很多开发者应该都很熟悉了,因为这门语言在语言排行榜上常年霸榜;不仅如此,JavaScript在web开发中占据着举足轻重的地位,开发者众多,数量上已经快要超过Java开发者了,开发社区非常活跃,越来越多的优秀开发框架涌现,比如Vue、React、Angular等,深受企业和开发者们的信赖。
尽管如今的JavaScript发展如此繁荣,但曾经的它可没这么顺利,命运坎坷用来形容一点都不为过。下面就来一起梳理梳理吧!如果小伙伴有更详细的补充,欢迎在评论区留下您的高见!
1990年底,欧洲核能研究组织(CERN)科学家 Tim Berners-Lee,在互联网的基础上发明了万维网(World Wide Web),进而实现了在网上浏览网页文件。
因为最开始时候,网页只能在操作系统的终端里浏览,只能使用命令行操作,网页也都是字符,并没有图片,更没有现在美观的样式和动画,不仅操作不方便,更没有使用体验和美观可言;万维网的出现,网页可以通过互联网来访问,使得这种情况得到大大改善。
1992 年,Nombas 公司开发了一种脚本语言:Cmm(C-minus-minus,中文翻译为C减减,简称 Cmm),尽管Cmm在命名上和C++有些类似,但和C++却是完全不同的语言,Cmm 是一门可以替代宏操作的脚本语言,在语法上与 C 和 C ++很高的相似度。
Nombas 公司为Cmm脚本语言开发了运行环境:CEnvi ,通过下载CEnvi ,便能在网页中嵌入Cmm脚本语言,Cmm的出现使得客户端脚本语言有了雏形。尽管后来Nombas 把 Cmm 的名字改成了 ScriptEase,也仅仅是改了名字,虽然名字叫ScriptEase,但他和JavaScript却没有任何关系,更不是JavaScript语言的源头。
1992年底,美国国家超级电脑应用中心(NCSA)开发了史上第一个浏览器,叫做 Mosaic;Mosaic浏览器不仅可以通过互联网访问网页,同时也可以显示图片,从此网页可以在图形界面的窗口浏览,浏览器时代正式开启。
1994年10月,Mosaic浏览器的核心开发成员马克·安德森(Marc Andreessen)和吉姆·克拉克(Jim.H.Clark)共同创立了Mosaic 公司,目的就是基于 Mosaic 继续开发浏览器。
但由于Mosaic 的商标被伊利诺伊大学拥有,并且Mosaic 浏览器的技术已经被转让给了Spyglass公司,所以新成立的Mosaic 公司不久后改名为 Netscape(中文译为网景),并重新编写代码实现了一个新的浏览器,这个新浏览器被取名为Netscape Navigator,即“导航者”。而它的对内称呼为Mozilla,意为Mosaic杀手。
1994年12月,Navigator 发布了1.0版,一经发布就取得了巨大成功,在短短的4 个月里就占据了 90% 的浏览器市场,短期甚至内成为了默认浏览器;同时,Nombas 也发布了CEnvi 的首个可用版本。
由于 Netscape Navigator 的成功,更多的应用开始出现在互联网上,让网上冲浪越来越流行;但此时,大部分因特网用户还仅仅通过 28.8 kbit/s 的调制解调器连接到网络,网速很慢而且上网费很贵,所以当时用户的上网体验不仅不好,而且还很昂贵;
有时候仅仅是简单的表单数据验证,就要与服务器进行多次的往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了 30 秒的处理后,看到的却是一条您的用户名忘记填写的提示,如果表单更大、更复杂,交互过程将会更加漫长,对于用户来说,这个过程太痛苦了。
网景公司很快也发现了,如果用户忘记填写“用户名”,就点了“发送”按钮,到服务器再发现这一点就太晚了,最好能在表单数据与服务端交互前,就能检测出“用户名”未填写,进而提示用户“请填写用户名”;更是敏感的意识到了,此时的Navigator 浏览器需要一种可以嵌入网页的脚本语言,这种语言运行在浏览器端,可以控制浏览器行为,并且能和服务端交互。
于是网景公司便决定开发一门可以Navigator 浏览器中运行的、轻量级的客户端脚本语言,如果此举成功,那么一些普通的用户操作便能放在客户端来执行,进而能大大改善用户操作体验,提高网络应用的运行效率。
但是又一个问题摆在了网景公司面前,这是一个选择题,有两个可选项:
第一个选择,使用现有的编程语言:
第二个选择,重新开发新语言:
到底采用哪一个选择,网景公司内部争执不下,管理层一时也难以下定决心。就在这时,Java 异军突起,这种可以 "一次编写,到处运行" (Write Once, Run Anywhere) 的语言一经发布就大火,广受开发者和企业的青睐。
网景公司管理层也动了心,决定与Sun公司合作,不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,但由于Java语言过于庞大,并不适合嵌入浏览器中,才不得不放弃。
网景公司的整个管理层,都是认准了Java语言的,以至于开发出新语言都被命名为JavaScript,该名称被Sun只授权给网景公司使用,后来的JavaScript更是被网景公司和Sun两家公司联手推出,官方的宣传 JavaScript 是 Java 的补充,属于轻量级的 Java;JavaScript = Java + Script更不是空穴来风。
1995年5月,网景公司做出决策,未来的网页客户端脚本语言必须"看上去与Java足够相似",使得Java程序员能够快速上手,功能不需要太强,语法简单,容易学习,即使是非专业的网页作者也能快速学会;这个决策一出,其实就已经将第一个选择排除了,选择了开发一门新语言。
1995年,网景公司找到了公司程序员 Brendan Eich ,任命其为这门新的客户端脚本语言的设计者;但Brendan Eich 的研究方向是函数式编程,他自身也有很强的函数式编程背景,所以对Java 和 OOP并不感冒。
当初网景公司招聘他的目的也是研究将Scheme语言作为网页客户端脚本语言的可能性。Brendan Eich本人原本以为进入新公司后,将会是研究Scheme语言,可却现在接到这样的任务,自然是不情愿的。
Scheme语言是函数式语言鼻祖 Lisp语言的一种方言,另外一种比较流行的Lisp方言是Common Lisp。
1995年5月,Brendan Eich 只用了10天,就设计完成了这种语言的第一版;它是一个大杂烩,语法有多个来源,当时的设计思路是:
网景公司的这种浏览器脚本语言,最初名字叫做 Mocha,1995年9月改为 LiveScript;同年12月,网景公司与 Sun 公司(Java 语言的发明者和所有者)达成协议,Sun 公司授权网景公司将这门新的语言命名为 JavaScript,借此机会,网景公司便将JavaScript申请成为了商标。
这样一来,网景公司可以借助 Java 语言的声势推广JavaScript,而 Sun 公司则将自己的影响力扩展到了浏览器。
仅用10天就设计出的语言,其表现可想而知。在其推出后的很长一段时间内,程序运行都有着各式各样的问题。就连JavaScript的设计者本人Brendan Eich都不喜欢他自己设计的这门语言:
"与其说我爱Javascript,不如说我恨它。它是C语言和Self语言yiyeqing的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之 处并非原创,它的原创之处并不优秀。' (the part that is good is not original, and the part that is original is not good.)"—— Brendan Eich对JavaScript的评价
1995年12月4日,网景公司与 Sun公司联合发布了 JavaScript 语言,对外宣传 JavaScript 是 Java 的补充,属于轻量级的 Java,专门用来操作网页,实现动态效果。
尽管名字里都有Java,但Java和JavaScript是两种不同的语言,这两种语言有一定的相似性,因为JavaScript的基本语法在设计过程中是借鉴了Java的。
另外,Java 程序要经过编译才能运行,而 JavaScript 语言的运行时解释器已经集成到浏览器中,所以JavaScript 可在浏览器直接运行。
1996年3月,Navigator 2.0 浏览器正式内置了 JavaScript 脚本语言。
同年,Netscape Navigator 3.0发布,此版本有分为“Standard Edition”和“Gold Edition”两个版本,两个版本区别在于,后者具备邮件软件和所见即所得的网页编辑程式。
从1995年开始,万维网慢慢开始被大众认知,受到越来越多的关注。能够显示图形的Mosaic 浏览器俘获了不少用户的芳心;Netscape Navigator 更是一经发布就占据了超过90%的浏览器市场,一度变成最受欢迎的网络浏览器。这时的Netscape 可谓是春风得意,但是好景不长。
由于微软对互联网发展的误判,轻视了浏览器的发展,使得Netscape Navigator 有机会发展壮大,但后知后觉的微软也看到了浏览器市场发展的前景,开始重视起来,并从Spyglass公司处获得了Mosaic的授权,开发出了自家的浏览器:IE 浏览器1.0,几个月后,IE 浏览器2.0发布,并免费向用户提供;而此时的Netscape Navigator 是收费的。
1995年,Netscape Navigator 2.0 发布后,浏览器市场都以网景的JavaScript为标准;微软公司虽然有IE 浏览器,但却没有JavaScript,所以IE浏览器在Netscape Navigator 2.0面前不堪一击。
于是,微软便找上了网景,想要收购网景,但春风得意的网景公司自然是不会同意的;微软自然也不会放弃,更不会放任网景做大,紧接着便是全力投入到了IE浏览器新版本的开发中。
1996年8月,微软IE 3.0发布,同时,微软也开发出了自己的客户端脚本语言:JScript(这个名字怎么看怎么像JavaScript的缩写),在对自家的IE浏览器的宣传上,微软也更是不遗余力;
1997年IE4.0发布,IE4.0有着更好的W3C标准的实现,更是被捆绑在了Windows中,随Windows系统一同发布;正是这一举措,IE浏览器的市场份额开始暴增;
到了1999年,微软的IE浏览器已经占据了绝大部分浏览器市场,而此时网景公司已被美国在线收购,留下Netscape Navigator在苟延残喘。
至此,第一次浏览器大战以IE大获全胜而告终。
1998年,网景深知浏览器大战中的Netscape Navigator败局已定,面对着无法挽回的市场份额,网景公司做了一个重大决定: 将Netscape Navigator 5.0开源;
同年,网景公司成立非营利性组织:Mozilla 基金会,主要负责Netscape Navigator的开源和维护;Mozilla 基金会独立于网景公司运行,所以就算后来网景公司虽被美国在线收购,Mozilla 基金会却能一直独立运作至今。
在Mozilla 基金会的手中,Netscape Navigator开放了源代码,分两个分支:
无论是开源后的Netscape Navigator,还是Firefox,都是基于Gecko渲染引擎来构建的。关于这段故事,还有一部纪录片,叫《奔腾的代码》,主要讲述的就是Netscape Navigator的开源和Firefox(火狐浏览器)的诞生的故事,想要详细了解的同好可以去搜来看看。
开源后的Firefox(火狐浏览器)重新开发了渲染引擎Gecko,并且积极拥抱JavaScript标准,无论是在性能,还是用户体验上,都有了极大的提升;不仅是在Windows系统,在Linux系统、Mac系统,也都有着不俗的表现,甚至在Linux系统中,比Chrome浏览器的表现都要好。
优异的性能,再加上在Mozilla 基金会的良好运作下,火狐浏览器逐渐了获得用户认可,原本被IE 浏览器占据的市场逐渐被火狐浏览器夺回。
反观IE浏览器,并没有积极适配EcmaScript,始终沉浸在自己的世界中,玩着只有自己的游戏,跟标准越走越远,渐渐被用户抛弃,原本的用户市场也被逐渐被涅槃后的火狐浏览器所取代。
纵观浏览器发展历史,不得不说,历史总是惊人的相似。
得益于 KDE 的 KHTML 和 KJS,苹果公司也开发了自家的JavaScript 引擎:Webkit渲染引擎,苹果公司不仅将Webkit渲染引擎开源免费 ,而且还基于Webkit渲染引擎开发了 Safari 浏览器。
谷歌于2008年12月发布了 Chrome 浏览器, 与Safari 浏览器使用相同的 WebKit 渲染引擎和一个名为 V8 引擎。
V8使用C++开发,相比其它的JavaScript引擎转换成字节码或解释执行,V8引擎会将JavaScript程序其编译成原生机器码,所以JavaScript程序在V8引擎下的运行速度足以媲美二进制程序。
不久之后,谷歌便以 Chromium项目开放了Chrome浏览器的源码;新功能会率先在Chromium上实现,稳定后才会应用在Chrome上。
在微软进入浏览器市场,发布了JScript之后,有 3 种不同的 JavaScript 实现同时存在,分别是:
三个巨头三足鼎立,形成了三分天下之势,网景公司也面临丧失浏览器脚本语言的主导权的局面;而由此导致的版本不兼容问题日益加剧,当时的一个网页程序往往要对三个平台提供不同的实现,开发和维护的成本都越来越高;
1996年11月,网景公司面对着逐渐被微软蚕食的浏览器市场,于是决定将 JavaScript 提交给国际标准化组织 ECMA(European Computer Manufacturers Association),希望 JavaScript 能够成为国际标准,以此抵抗微软。
ECMA接受了这个请求,并决定由39号技术委员会(Technical Committee 39)负责制定和审核这个标准,委员会成员由业内各大公司派出的工程师组成,该委员会定期开会,所有的邮件讨论和会议记录,都是公开的。
1997年7月,ECMA 组织发布262号标准文件(即:ECMA-262)的第一版,规定了浏览器脚本语言JavaScript的标准,并该语言标准取名为 ECMAScript。
之所以不叫 JavaScript,一方面是由于商标的关系,因为Java 是 Sun 公司的商标,根据一份授权协议,只有 网景公司可以合法地使用 JavaScript 这个名字,且 JavaScript 已经被 网景公司注册为商标;另一方面是ECMA也想体现ECMAScript并不同于曾经的JavaScript,ECMA组织也不同于网景,这样就有利于保证这门语言的开放性和中立性。
至此,完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型(DOM),浏览器对象模型(BOM)。符合ECMA-262 3rd Edition标准的实现有:
需要注意的是,ECMAScript 只用来标准化 JavaScript 语言的基本语法,与部署环境相关的标准都由其他标准规定,比如 DOM 的标准就是由 W3C组织制定的。
ECMA-262 标准后来也获得国际标准化组织 ISO的批准,并以标准号 ISO-16262命名。
1997年7月,ECMAScript 1.0发布,这个版本做了些小改动:支持Unicode标准,对象与平台无关等,其他的特性与网景发布的JavaScript1.1并无二致;
1998年6月,ECMAScript 2.0发布,这个版本主要做的是细节优化,没有新功能发布;
1999年12月,ECMAScript 3.0版发布,这个版本对JavaScript标准做了大量的修改。修复了包括字符串处理、错误定义和数值输出等一系列问题。新增了对正则表达式、新控制语句、try-catch异常处理的支持。此时的ECMAScript才能算是一门真正的编程语言。
2007年10月,ECMAScript 4.0版草案发布,草案的标准跟第3版比起来,几乎是定义了一门新语言;因为草案不仅包含了强类型变量、新的数据结构和继承,还添加了JSON对象、继承的方法和高级属性定义,以及严格模式。由于改动过大,所以4.0草案发布后,遭到了Yahoo、Microsoft、Google等公司的反对。
2008年7月,由于各方争执不下,ECMAScript 4.0 的开发被终止,ECMAScript 4.0中改动较少的一部分被拿出来,作为 ECMAScript 3.1开发,项目代号为Harmony,而其他的改动较大的功能将会逐步推出,会后不久,ECMAScript 3.1 改名为 ECMAScript 5;
2009年12月,ECMAScript 5.0版 正式发布;Harmony 项目则一分为二,一些可行性较高的功能优先开发,后来成了 ECMAScript 6;而另一些不太成熟的设想,则会考虑放在ECMAScript 7中;
2011年6月,ECMAScript 5.1版发布,并且成为 ISO 国际标准(ISO/IEC 16262:2011);
2012年底,所有的主流浏览器全面支持 ECMAScript 5.1;
2015年6月,ECMAScript 6 正式发布,并且更名为“ECMAScript 2015”。同时, TC39 委员会也计划以后每年发布一个 ECMAScript 的版本;2016年发布的版本,称为“ECMAScript 2016”,2017年发布“ECMAScript 2017”,以后的版本以此类推。
Ajax这个词首先出现在《Ajax: A New Approach to Web Applications》一文中,该文的作者是Jesse James Garrett,在该文中,将Ajax定义为了:Asynchronous JavaScrpt + XML的组合,代表并不是单一的技术,而是多种技术的组合。
该文的迅速流传使得Ajax被更多开发者认知、认可,并在1998年得到了广泛应用。Ajax允许客户端脚本发送HTTP请求动态加载局部的网页内容,实现网页的异步加载,也就意味着不必因为局部网页内容的修改而加载整个网页,从而能够带来更加友好的网页体验。
Ajax的第一个组件由Outlook Web Access小组写成,被用于微软Exchange Server,因此Outlook Web Access成了第一个应用了Ajax技术的商业应用程序。
2005年,Google在它的很多应用中都使用了Ajax,如Google讨论组、Google地图、Google搜索建议、Gmail等。
自此以后,Ajax迅速窜红,进而引发了一场互联网革命,使得基于Ajax的综合框架和JS库的急剧增加,越来越多的优秀框架出现,不仅Web应用的构建变得更加容易,也改进了 JavaScript 编程实践,对JavaScript的发展推进做出了巨大的贡献。
jQuery是一个快速、简洁的JavaScript框架,于2006年8月发布第一个稳定版本,是继Prototype之后又一个优秀的JavaScript代码库。它封装JavaScript常用的功能代码,并提供了一种更加简便的操作模式,使得HTML文档操作、事件处理、动画设计和Ajax交互变得更加容易。
此外,jQuery具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。
就在Chromium 发布半年后,Ryan Dahl创建了一个基于 Chrome V8 引擎的 JavaScript 开发平台:Node.js, Node .js提供了一个可以JavaScript运行在服务端的运行环境,使得JavaScript程序可以运行在服务端;可以说,Node.js的出现让 JavaScript 提升了一个层次,让前端程序员不再局限于客户端开发,也让全栈开发成为了可能。
随Node.js发布的还有包管理工具:npm,通过npm可以:
由于Node.js的成功,在npm管理工具的带动下,一大批优秀的JavaScript开发框架开始涌现,其中有代表性的便是Vue.js、Angular.js、React.js,这些框架语法简单、性能优越、文档丰富,使用这些框架能够快速搭建前端应用,而且,由于活跃的开发社区,这些框架都有着丰富的系统组件,能够完成一切的业务需求。
Vue.js是一套用于构建用户界面的渐进式JavaScript框架,自底向上增量开发的设计,专注于视图层,非常容易学习,也非常容易与其它库或已有项目整合,作者是尤雨溪;作者和框架无论在国内、国外都有着不小的知名度;
Angular.js是一套Google推出的JavaScript开发框架,诞生于2009年,该框架有着MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入等诸多核心特性;Angular的理念是 组建视图(UI)和写软件逻辑可同时进行,将DOM操作和应用逻辑解耦,将测试和开发同等看待,将客户端和服务器端解耦,在整个开发流程里都引导着开发者:从设计UI,到编写业务逻辑,再到测试。
React.js 是Facebook 推出的JavaScript框架,起源于 Facebook 的内部项目,由于 React 的设计思想极其独特,和Vue一样,React不是一个完整的MVC框架,很多人都认为是MVC中的V(View)。此外,React Native框架可用于开发跨平台的App应用,一套代码便能同时运行IOS和Android。
通过对Chromium 的移植,JavaScript还能用于开发桌面应用,典型应用便是NW.js和Electron.js;都是使用HTML + CSS + JavaScript便能开发出同时在Linux,Mac OS X和Windows上可运行的桌面软件。
今天,Deno 1.0 正式发布,什么是Deno呢?Deno是使用V8引擎并内置于Rust的JavaScript和TypeScript的新运行时,致力于在Web浏览器之外执行JavaScript和TypeScript程序。
它和Node.js的设计者是同一人:Ryan Dahl,是Ryan Dahl继Node.js之后的又一大作;Deno的设计特别注重安全,有着众多优点:
虽然都支持V8引擎,但Deno却并不是Node.js的分支,它甚至都不和Node(NPM)兼容;Deno是一个全新的JavaScript和TypeScript程序运行时,意在构建更加安全和高效的JavaScript和TypeScript程序,虽然目前和Node.js并不兼容,Deno却希望在将来能够使用Deno来运行更多的Node项目。
纵观JavaScript的发展,可谓感慨良多!曾经的JavaScript是命运坎坷,还未出生就不受亲生父亲的待见,出生后更是常年被笼罩在Java 的阴影之下,甚至一度被认为是Java 的补充;被卷入浏览器大战,差点被遗弃。
但是好在它遇到了自己真正的归宿:ECMA组织,不仅获得了重生,更是广受开发者青睐,随着Node.js的出现,Vue.js、Angular.js、React.js蓬勃发展,JavaScript有了更大的应用;Deno的诞生,使得JavaScript已经不仅限于Web浏览器,又会掀起一场更大的互联网革命,让我们拭目以待。
完结,老夫虽不正经,但老夫一身的才华!关注我,获取更多编程科技知识。