2006年至今,咱们时常能够看到JavaScript的新闻,刚开始只是JavaScript引擎性能的提高,到后来发现不少是来自HTML5和Node创造的奇迹。若是只看表面,很容易让人感受这又是一颗卫星。这种现象让人以为不可信,因此出现了如下各类版本的误解。
为了后端然后端,有意思吗?
怎么又发明了一门新语言?
JavaScript承担的责任过重了。
直觉上,JavaScript不该该运行在后端。
前端工程师要逆袭了。
一方面,你们看到JavaScript在各个地方放出异彩,其余语言的开发者既羡慕它的成果,又担忧它对当前所从事的语言形成冲击;另外一方面,人们仍是有JavaScript只能作前端脚本的定势思惟。究其缘由,仍是由于人们缺少历史观层次上的认知,因此会产生一些莫须有的惴惴不安。
1995年,JavaScript随网景公司发布的Netscape Navigator 2.0发布,它最先命名为LiveScript,随后改名为JavaScript。它出自现在的Mozilla公司的CTO——Brendan Eich之手,其产生来源于网景公司发布的Netscape Navigator浏览器须要一种脚本语言来协助浏览器作一些简单的动态操做。当时网景公司与Sun公司合做密切,不懂技术的管理层但愿获得一个Java的脚本版语言,以期能像Java同样风靡。Brendan Eich本来进入网景公司是但愿作Scheme语言的开发,可是却接到了一个不喜欢的任务,但迫于当时形势,不得不完成此事,因而JavaScript之父在10天的时间里仓促完成了JavaScript的设计,当时的项目代号是Mocha,名字叫LiveScript。
这门语言除了看起来像Java外,本质与Java语言相去甚远,管理层指望的Java Script其实借鉴了C、Scheme、Self、Java的设计。尽管仓促,可是这门语言仍是借鉴了其余语言的很多优势,如函数式、原型链继承等。处于Java阴影下的这门语言得到了它最终的名字:JavaScript。至今,仍然还有许多人分不清Java与JavaScript的关系,就像分不清雷锋与雷峰塔同样。
虽然JavaScript的产生与Netscape Navigator浏览器的需求有关系,但它并不是只是设计出来用于浏览器前端的。早在1994年,网景公司就公布了其Netscape Enterprise Server中的一种服务器端脚本实现,它的名字叫LiveWire,是最先的服务器端JavaScript,甚至早于浏览器中的JavaScript公布。对于这门图灵完备的语言,网景早就开始尝试将它用在后端。
随后,微软在第一次浏览器大战时,于1996年发布的IE 3.0中也包含了它的脚本语言:JScript。基于商标的缘由,它叫JScript,可是与JavaScript兼容。在1997年年初,微软在它的服务器IIS 3.0中也包含了JScript,这就是咱们在ASP中能使用的脚本语言。鉴于微软到处与网景针锋相对,出于保护本身的目的,网景公司推动了JavaScript的标准化进程,于1996年11月将JavaScript递交给ECMA国际标准组织,在1997年7月公布了第一个版本,是为ECMA-262号标准,又称ECMAScript。
能够看到,JavaScript一早就能运行在先后端,但风云变幻,在先后端各自的待遇却不尽相同。伴随着Java、PHP、.NET等服务器端技术的风靡,与前端浏览器中的JavaScript愈来愈重要相比,服务器端JavaScript逐渐式微。只剩下Rhino、SpiderMonkey用于工具。
然而,这个世界是变化的。第一次浏览器大战落幕后的JavaScript的世界有些平静,但依然在萌生一些变化。Google对Ajax的应用让JavaScript变得愈来愈重要。Firefox的发布掀起了对IE的反攻,迎来了第二次浏览器大战,竞争令JavaScript的性能不断提高,Chrome的加入令它高潮迭出。CommonJS规范的提出,不断在完善JavaScript。ECMAScript标准的不断推动,令语言更加精炼简洁,不停地去芜存菁。
浏览器端JavaScript在Web应用中盛行,甚至让人们忘掉了JavaScript能够在服务器端运行这码事。可是,服务器端JavaScript如今回来了,由于Node诞生了。Node的诞生离不开上述的历史契机,服务器端JavaScript在漫长的历史中长期停滞留下空白,但Node从新将这个领域激活。Ryan Dahl基于对高性能Web服务器的探索,无心间促成了服务器端JavaScript领域的面目一新。Node凭借V8的高性能和异步I/O模型将JavaScript从新推向了一个高潮。如今,Node不只知足JavaScript同时运行在先后端,并且性能还十分高效。与传统印象中的不一样,它甚至可比于当前的高效脚本语言。
奇妙的反应还在继续,先后端要跨语言开发的现状已经开始改变,由于语言堆栈的不一样,开发者的分工也进行了细分:前端工程师和后端工程师。专业技能由于分工而精进,但也将技能变为专利,彷佛前端工程师不能进行后端开发,后端工程师搞不定前端开发,犹如树立的墙。但Node的出现令这种分工的界限又开始模糊了。同时一些后端工程师也关注到Node,他们甚至不关心先后端语言是否一致,而是赤裸裸地表示对Node高性能的垂涎,如实时、高并发等。
大量的先后端工程师加入了Node的开发阵营,GitHub上JavaScript是最活跃的开发语言,NPM社区第三方模块恐怖的增加速度和下载量都昭示着这个过程不可逆,在这里吼一声万能的NPM,总能找到你须要的解决方案。不少不断涌现的项目和创意都由于Node和前端开发能共用一种语言而独特。换言之,Node的本意是提供一个高性能的面向网络的执行平台,但无心间促成了JavaScript社区的繁荣,并进而造成强大的生态系统。
前端
目前,尚未一本书将Node自身结构介绍出来,大多停留在Node介绍或者框架、库的使用层面上,本书但愿从不一样的视角揭示Node本身内在的特色和结构。也许你已经用过Node进行相关的开发,在使用了Node带来的欣喜后,还能在阅读本书时,发出一句“哦,原来Node是这样的”,这就是本书的简单寄望。
对于Node初学者,目前市面上也已经有Node相关的入门书,它们能够快速地领你进入Node开发之旅。在了解了这些基本过程后,想了解更多Node知识的好奇心,会领你来阅读本书的。后端