JavaScript的发展史及其应⽤领域
1.JavaScript发展史
1.1 Nombas 和 ScriptEase
⼤概在 1992 年,⼀家称作 Nombas 的公司开发了⼀种叫做 C 减减(C-minus-minus,简称 Cmm)的嵌⼊式脚本语⾔。Cmm背后的理念很简单:⼀个⾜够强⼤可以替代宏操作(macro)的脚本语⾔,同时保持与 C (和 C ++)⾜够的相似性,以便开发⼈员能很快学会。这个脚本语⾔捆绑在⼀个叫做 CEnvi 的共享软件中,它⾸次向开发⼈员展⽰了这种语⾔的威⼒。
Nombas 最终把 Cmm 的名字改成了 ScriptEase,原因是后⾯的部分(mm)听起来过于消极,同时字母 C “令⼈害怕”。现在ScriptEase 已经成为了 Nombas 产品背后的主要驱动⼒。
当 Netscape Navigator 崭露头⾓时,Nombas 开发了⼀个可以嵌⼊⽹页中的 CEnvi 的版本。这些早期的试验被称为 Espresso
Page(浓咖啡般的页⾯),它们代表了第⼀个在万维⽹上使⽤的客户端语⾔。⽽ Nombas 丝毫没有料到它的理念将会成为万维⽹的⼀块重要基⽯。
1.2 Netscape 发明了 JavaScript
JavaScript因互联⽹⽽⽣,紧随着浏览器的出现⽽问世。回顾它的历史,就要从浏览器的历史讲起。
1990年底,欧洲核能研究组织(CERN)科学家Tim Berners-Lee,在全世界最⼤的电脑⽹络——互联⽹的基础上,发明了万维⽹(World Wide Web),从此可以在⽹上浏览⽹页⽂件。最早的⽹页只能在操作系统的终端⾥浏览,也就是说只能使⽤命令⾏操作,⽹页都是在字符窗⼝中显⽰,这当然⾮常不⽅便。
1992年底,美国国家超级电脑应⽤中⼼(NCSA)开始开发⼀个独⽴的浏览器,叫做Mosaic。这是⼈类历史上第⼀个浏览器,从此⽹页可以在图形界⾯的窗⼝浏览。
1994年10⽉,NCSA的⼀个主要程序员Marc Andreessen联合风险投资家Jim Clark,成⽴了Mosaic通信公司(Mosaic Communications),不久后改名为Netscape。这家公司的⽅向,就是在Mosaic的基础上,开发⾯向普通⽤户的新⼀代的浏览器Netscape Navigator。
1994年12⽉,Navigator发布了1.0版,市场份额⼀举超过90%。Netscape公司很快发现,Navigator浏览器需要⼀种可以嵌⼊⽹页的脚本语⾔,⽤来控制浏览器⾏为。管理层对这种浏览器脚本语⾔的设想是:功能不需要太强,语法较为简单,容易学习和部署。那⼀年,正逢Java语⾔开始推向市场,Netscape公司决定,脚本语⾔的语法要接近Java,并且可以⽀持Java程序。这些设想直接排除了使⽤现存语⾔,⽐如perl、python和TCL。
1995年,Brendan Eich开发这种⽹页脚本语⾔。Brendan Eich有很强的函数式编程背景,希望以Scheme语⾔(函数式语⾔⿐祖LISP语⾔的⼀种⽅⾔)为蓝本,实现这种新语⾔。1995年5⽉,Brendan Eich只⽤了10天,就设计完成了这种语⾔的第⼀版。它是⼀个⼤杂烩,语法有多个来源:
基本语法:借鉴C语⾔和Java语⾔。
数据结构:借鉴Java语⾔,包括将值分成原始值和对象两⼤类。
函数的⽤法:借鉴Scheme语⾔和Awk语⾔,将函数当作第⼀等公民,并引⼊闭包。
原型继承模型:借鉴Self语⾔(Smalltalk的⼀种变种)。
正则表达式:借鉴Perl语⾔。
字符串和数组处理:借鉴Python语⾔。
javascript的特性为了保持简单,这种脚本语⾔缺少⼀些关键的功能,⽐如块级作⽤域、模块、⼦类型(subtyping)等等,但是可以利⽤现有功能出解决办法。这种功能的不⾜,直接导致了后来JavaScript的⼀个显著特点:对于其他语⾔,你需要学习语⾔的各种功能,⽽对于JavaScript,你常常需要学习各种解决问题的模式。⽽且由于来源多样,从⼀开始就注定,JavaScript的编程风格是函数式编程和⾯向对象编程的⼀种混合体。
1.3 JavaScript和Java的关系
Netscape公司的这种浏览器脚本语⾔,最初名字叫做Mocha,1995年9⽉改为LiveScript。12⽉,Netscape公司与Sun公司(Java语⾔的发明者和所有者)达成协议,后者允许将这种语⾔叫做JavaScript。这样⼀来,Netscape公司可以借助Java语⾔的声势,⽽Sun公司则将⾃⼰的影响⼒扩展到了浏览器。
之所以起这个名字,并不是因为JavaScript本⾝与Java语⾔有多么深的关系(事实上,两者关系并不深),⽽是因为Netscape公司已经决定,使⽤Java语⾔开发⽹络应⽤程序,JavaScript可以像胶⽔⼀样,将各个部分连接起来。当然,后来的历史是Java语⾔的浏览器插件(applet)失败了,JavaScript反⽽发扬光⼤。
1995年12⽉4⽇,Netscape公司与Sun公司联合发布了JavaScript语⾔。
1996年3⽉,Navigator 2.0浏览器正式内置了JavaScript脚本语⾔。
1.4 三⾜⿍⽴
因为 JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中发布了 1.1 版。恰巧那个时候,微软决定进军浏览器,发布了IE 3.0 并搭载了⼀个 JavaScript 的克隆版,叫做 JScript(这样命名
是为了避免与 Netscape 潜在的许可纠纷)。微软步⼊ Web 浏览器领域的这重要⼀步虽然令其声名狼藉,但也成为 JavaScript 语⾔发展过程中的重要⼀步。(注:这⾥就是前端开发的痛苦之源)
在微软进⼊后,有 3 种不同的 JavaScript 版本同时存在:
1. Netscape Navigator 3.0 中的 JavaScript;
2. IE 中的 JScript;
3. CEnvi 中的 ScriptEase
与 C 和其他编程语⾔不同的是,JavaScript 并没有⼀个标准来统⼀其语法或特性,⽽这 3 种不同的版本恰恰突出了这个问题。随着业界担⼼的增加,这个语⾔的标准化显然已经势在必⾏。
1.5 ⾛向统⼀
1996年11⽉,⽹景公司决定将JavaScript提交给国际标准化组织ECMA(European Computer Manufacturers Association),希望JavaScript能够成为国际标准,以此抵抗微软。
1997年7⽉,ECMA组织发布262号标准⽂件(ECMA-262)的第⼀版,规定了浏览器脚本语⾔的标准,
并将这种语⾔称为ECMAScript。这个版本就是ECMAScript 1.0版。之所以不叫JavaScript,⼀⽅⾯是由于商标的关系,Java是Sun公司的商标,根据⼀份授权协议,只有Netscape公司可以合法地使⽤JavaScript这个名字,且JavaScript已经被Netscape公司注册为商标,另⼀⽅⾯也是想体现这门语⾔的制定者是ECMA,不是Netscape,这样有利于保证这门语⾔的开放性和中⽴性。因此,ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的⼀种实现。在⽇常场合,这两个词是可以互换的。
ECMAScript只⽤来标准化JavaScript这种语⾔的基本语法结构,与部署环境相关的标准都由其他标准规定,⽐如DOM的标准就是由W3C 组织(World Wide Web Consortium)制定的。
ECMA-262标准后来也被另⼀个国际标准化组织ISO(International Organization for Standardization)批准,标准号是ISO-
16262。
1.6 混乱的根源—浏览器之战
1991年,WorldWideWeb 浏览器发布。这款由 Web 之⽗ Tim Berners-Lee 亲⼿设计的图形化浏览器还包含⼀个所见即所得 HTML 编辑器,为了避免同 WWW 混淆,这个浏览器后来改名为 Nexus.
1993年,Mosaic 发布。Internet 的流⾏应该归功于 Mosaic,这款浏览器将 Web 带向了⼤众。诸如 IE, Firefox ⼀类的当代浏览器仍然在延⽤ Mosaic 的图形化操作界⾯思想。
1994年,Netscape 成⽴。Marc Andreessen 带领 Mosaic 的程序员成⽴了 Netscape 公司,并发布了第⼀款商业浏览器 Netscape Navigator.
1995年,IE 发布。浏览器之战即将爆发,微软针对 Netscape 发布了他们⾃⼰的浏览器 IE,第⼀场浏览器之战爆发。
1996年,Opera 发布。Telenor 是挪威最⼤的通讯公司,他们推出了 Opera,并在两年后进军移动市场,推出 Opera 的移动版。
1998年,Mozilla 项⽬成⽴。Netscape 成⽴ Mozilla 开源项⽬,开发下⼀代浏览器,后来证明,使⽤原有代码开发新东西是⼀种负担,接着他们着⼿从新开发。
1998年,Netscape 浏览器⾛向开源。随着同 IE 征战的失利,Netscape 市场份额急剧下降,Netscape 决定将⾃⼰的浏览器开源以期重整⼭河。
2002年,IE 开始主导浏览器市场。市场份额达到95%,借助同操作系统的捆绑优势,IE 赢得第⼀场浏览器之战。战争是痛苦的,战后阴影对世界的影响更⼤。IE和⽹景当年⼤战期间,置⽹页标准W3C相
关标准于不顾,互相不兼容对⽅浏览器,严重增加了⽹站开发者的成本,影响了⽤户的体验和选择权。这个影响⼀直持续到15年后的现在。看看⾝边仍然被IE奴役却⽆法放弃IE的⼈们,看看那些只兼容IE不兼容FF、Chrome的⽹站们,都与浏览器⼀战的阴影有关。
2003年,苹果 Safari 浏览器登场。苹果进⼊了浏览器市场,推出⾃⼰的 Webkit 引擎,该引擎⾮常优秀,后来被包括 Google, Nokia 之类的⼚商⽤于⼿机浏览器。
2004年,Firefox 引发第⼆场浏览器之战。Firefox 1.0 推出。早在 Beta 测试期间就积累了⼤量⼈⽓的 Firefox 引发了第⼆场浏览器之战,当年年底,Firefox 已经赢得 7.4% 的市场份额。
2006年,IE7 发布。IE6 发布后的第六年,迫于 Firefox 的压⼒,微软匆匆推出 IE7 应战,吸取了 Firefox 的⼀些设计思想,如标签式浏览,反钓鱼等。但这款浏览器现在看来并不成功。
2008年,Google 携 Chrome 参战。Google 发布了他们⾃⼰的浏览器,加⼊这场战争。轻量,快,异常的稳固让这款浏览器成为不可轻视的⼀个对⼿。
2013年,历史重演。Google宣布从 WebKit分⽀出⾃⼰的浏览器渲染引擎 Blink。Opera放弃⾃⼰的Presto渲染和软件引擎,转⽽使⽤Chrome和Safari浏览器WebKit。
2. JavaScript 能做什么?
Atwood’s Law: any application that can be written in JavaScript, will eventually be written in JavaScript.
Atwood 定律:凡是能⽤JavaScript写出来的,最终都会⽤JavaScript写出来。
2.1 Web前端开发
通信:Ajax/WebSocket
库:jQuery/zeptoUI/Dojo
框架:Bootstrap/Amaze
UI依赖管理:RequireJS/SeaJs
MVVM:AngularJS/Avalon
2.2 后端服务开发
NodeJS的流⾏,让JavaScript可以作为后端语⾔,加之JavaScript的异步特性,以及灵活的函数式编程,针对⾼并发有独特的优势!相对于Java,C#等后端语⾔,它也更显得⼩⽽美,⼀个⽂件即可实现
⼀个Server功能。
2.3 桌⾯应⽤
NW.js (Linux, Mac OS X, Windows):nwjs.io/ ;
有道heX:udao/zh-cn/index.html#bottom ;
2.4 本地化存储
由于JavaScript⼀直没有存储数据的能⼒,导致JavaScript处在⼀个“辅助”的地位,HTML5的推⼴,JS有了Storage,IndexDB等特性,可以存储适量(Storage⼤约在5M)的数据。不要⼩看这适量的存储,妥善设计,可以让你的系统脱离后端的制约。⽬前各⼤平台都已⽀持,包括Android,IOS.
2.5 ApplicationCache
俗称“⾼级缓存”,HTTP协议本⾝会针对请求⽂件进⾏缓存,但是由于这个缓存是协议层的设计,应⽤层要灵活控制⽐较⿇烦。⽽ApplicationCache就是针对应⽤层的API,结合本地存储,可以实现离线应⽤! ⼤家看到离线应该就明⽩了。⽬前类似淘宝京东这样的电商App端,不联⽹照样可以正常操作。更换缓存⽂件,就可在应⽤内部失效⼩版本更新。
2.6 图形编程/数据可视化
JavaScript在图形处理⽅⾯⼀直是⽐较弱的。之前处理图形⽤的是SVG,SVG完全⽤XML来是实现图形。⼤型的图形处理,类似游戏中,就不太⽅便(⽬前主流的游戏引擎还是使⽤DOM来开发的)。⽽HTML5的Canvas,完全使⽤编程来实现图形,较之SVG更加灵活。虽然⽬前并没有成为主流,但是已经暂露头脚,其在游戏开发中的份额已经越来越多。世界上最流⾏的 2D 游戏引擎之⼀ Cocos2d 和最流⾏的3D 游戏引擎之⼀ Unity3D 均⽀持 JS 开发游戏。
2.7 构建⾼扩展的架构
JavaScript作为动态语⾔,加上其继承的灵活性,⼜兼具函数式编程的特性,在针对JavaScript设计架构时,相较于Java会更具扩展性!JavaScript从⼀开始被被冠以“难以管理”,但是在经过了CMD,MVC等等的发展,早已不是当初的JavaScript,如果设计得当,它的兼容扩展性秒杀传统的后端语⾔。
2.8 Hybrid移动应⽤开发
PhoneGap的问世使得JavaScript从开发传统移动Web应⽤转向混合移动应⽤。PhoneGap是⼀个能够让你⽤普通的web技术编写出能够轻松调⽤API接⼝和进⼊应⽤商店的混合移动应⽤开发平台。是唯⼀
的⼀个⽀持iOS、Android、BlackBerry、Windows Phone 7、webOS、Bada、和Symbian7 7个平台的开源移动框架。它的优势是⽆以伦⽐的:开发成本低——据估算,⾄多Native App的五分之⼀!Written Once,Run Everywhere!
2.9 Native移动应⽤开发
Facebook 在 React.js Conf 2015 ⼤会上推出了基于 JavaScript 的开源框架 React Native,React Native 结合了 Web 应⽤和
Native 应⽤的优势,可以使⽤ JavaScript 来开发 iOS 和 Android 原⽣应⽤。在 JavaScript 中⽤ React 抽象操作系统原⽣的 UI 组件,代替 DOM 元素来渲染等。
Learn Once,Write Everywhere!
2.10 嵌⼊式/物联⽹开发
3.参考⽂献
1.《》
2.《》
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论