Skip to content
This repository has been archived by the owner on Apr 27, 2021. It is now read-only.

Node简介

yfwz100 edited this page Jan 29, 2013 · 1 revision

引自其官方网站的一段话:

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 事件驱动的编程模型。

JavaScript 部分

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 这种编程模型很适合应对大量内容访问的情况,对其他编程语言也有参考作用。

Clone this wiki locally