导论:入门新的技术,尽量从历史发展的路径来理解它出现的原因
一、Node.js的总体概况
1. JavaScript的诞生
在上个世纪的1995年,当时的网景公司正凭借其Navigator浏览器,成为Web时代开启时最著名的第一代互联网公司。由于网景公司希望能在静态html页面上添加一些动态效果,于是叫Brendan Eich这哥们在两周之内设计出了JavaScript语言。为什么起名叫JavaScript?这是因为当时Java语言就已经非常热门了,所以网景公司希望借助Java的名气来推广,但事实上JavaScript除了语法上有点像Java,其他部分基本上没啥关系。
2. ECMAScript的诞生
因为网景开发了JavaScript,一年后微软又模仿JavaScript开发了JScript,为了让JavaScript成为全球标准,几个公司联合ECMA组织制定了JavaScript语言的标准,被称为ECMAScript标准。
所以简单来说就是,ECMAScript是一种语言标准,而JavaScript是网景公司对ECMAScript标准的一种实现。
目前JavaScript最新版本就是ECMAScript 6,简写为ES6
3. JavaScript引擎Chrome V8
为什么需要JavaScript引擎?因为我们写的JavaScript代码直接交给CPU是无法执行的,所以我们还要使用汇编语言来写一个JavaScript解释器来解释JavaScript,但是写汇编代码是一件很痛苦的事情,并且不同类型的CPU的指令集是不一样的,那就意味着需要给每一种CPU重写汇编代码。
那么我们可不可以用高级语言来解释JavaScript,然后高级语言再转变成汇编语言。这是可以的,例如谷歌的Chrome V8就是一款JavaScript引擎,是C++代码写的。
JavaScript——高级语言——汇编语言——机器语言——CPU执行
通过这个过程,就不需要自己再写一套符合JavaScript的解释程序。
4. Node.js的诞生
话说有个叫Ryan Dahl的外国人,他的工作是用C/C++写高性能Web服务,对于高性能,异步IO、事件驱动是基本原则,但是用C/C++来实现就太痛苦了。于是这位仁兄开始设想用其他高级语言开发Web服务。他评估了很多其他语言,发现很多语言虽然同时提供同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以最终Ryan选择了JavaScript,因为JavaScript是单线程执行的,根本不能执行同步IO操作,只能进行异步IO操作。
虽然当时已经有JavaScript引擎Chrome V8了,但是无法满足小伙Ryan对后端服务的需求,所以小伙Ryan就自己计划写个JavaScript引擎,不过他很快明智地放弃了,因为Chrome V8是开源的,虽然不满足需求,但是可以以用户体验不佳为理由,让Google投资区优化V8,小伙只负责改造一下拿来用,还不用付钱。
于是在2009年,Ryan正式推出了基于JavaScript引擎Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。
5. 名词解释:事件驱动
事件驱动
浏览者通过鼠标或键盘执行的操作称为事件,对此事件做出响应的代码称为事件处理程序,事件的发生使得响应的事件处理程序被执行称为事件驱动。