-
Notifications
You must be signed in to change notification settings - Fork 35
Node简介
引自其官方网站的一段话:
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
Node (或称为 Node.js) 是一个新兴的 JavaScript 的执行平台。之所以说是一个执行平台,是因为 Node 本身并不仅仅是一个 JavaScript 的解释器或者虚拟机,它基于 Google Chrome 的 JavaScript 引擎 v8 进行开发,但与一般的 JavaScript 引擎不同,Node 为 JavaScript 语言提供了很多周边类库,以及为 JavaScript 语言执行环境提供像类定义、命名空间、包管理的机制以及新的编程模型。
一般来说,Node 包括两部分,一部分是 V8 JavaScript 引擎,另一部分则是 Node 事件驱动的编程模型。
Node 使用和浏览器基本相同的 JavaScript 引擎,只是新引入了 CommonJS 建议的包管理机制(require()
函数)以及附带的基础类库。如果有 JavaScript 编程经历,那么使用 Node 会感到非常熟悉。
需要注意的是,JavaScript 是 ECMAScript 的一个实现,所以,Node 理论上是 ECMAScript 的一个实现。关于 JavaScript 相关的几个叫法及语言实现,可以参考 ECMAScript 和 JavaScript 的实现 ,或者,百度一下…… 不过,知道 JavaScript 和 ECMAScript 基本等价即可。
如果没有 JavaScript 编程经历,可以看看 w3school 提供的 JavaScript 教程 以及 ECMAScript 教程。参考这两篇文档的时候,可能会有所疑惑, Node 里面并不定义和浏览器相关的内容,所以,只能参考这两篇教程的 JavaScript 语法 和 ECMAScript 语法部分(特别是 ECMAScript 的语法,即 JavaScript 高级教程的内容)。不过,这两份文档也只是入门。
对于更详细的 JavaScript 资源,可以参考 Mozilla 开发者网络 。
关于 Node 的函数说明,参考 Node.js 文档 。
如果还为掌握 JavaScript 的编程基础,还是先看上一节的内容吧。下面的内容使用 JavaScript 语法举例。
事实上,使用 JavaScript 作为服务器端编程的项目并不罕见,早期 ASP 就可以使用 VBScript 或者 JavaScript 进行服务器端语言开发。还有类似 JavaScript 的旨在统一网站客户端/服务器技术的 HAXE 语言。但 Node 的兴起不仅仅因为 Node 是一个使用 JavaScript 编程的服务器端编程语言,还因为 Node 的事件驱动模型。
事件驱动模型是什么呢?简单地说,编程的时候并不考虑顺序执行,而是,总是等待满足某事件的条件的时候才执行。因此, Node 的编程模型也被成为异步的编程模型。而我们普通的编程,例如:
var a, b;
b = task();
a = b + 1;
总是假设前一行语句被执行了,才执行这行语句。而 JavaScript 本身的语法也不例外(它也是 C 语言语法家族的~)。但是,有时前一句话执行的时间很长,需要等待某资源的打开,而我们在这个过程中想显示点别的东西,在其他的编程语言,例如 Java 中,我们肯定会想到线程吧,但只是因为一句赋值而新建一个线程。而在 Node 中:
var a, b;
b.init(function(value) {
a = value;
};
b = requestForTask();
其中,task()
函数并不真正等待,而是发送一个请求到操作系统或者远程服务器、监听器请求一个资源(耗时很少),然后,在 b
初始化完毕后(一个事件),对 a
赋值那段代码才真正执行。因此,对 b
赋值后可以立即返回,提高了对应复杂情况的灵敏度。
因此,在 Node 中,我们应该针对事件的发生而编程,而不是等待资源然后顺序编程。 Node 这种编程模型很适合应对大量内容访问的情况,对其他编程语言也有参考作用。