Node.js 简介
Node.js 是什么
Node.js 有着强大而灵活的包管理器(node package manager,npm)
目前, 已经有强大第三方工具模块, 例如数据库连接, 网站开发框架, CSS生成器, 操作系统API, 网络通信 等.
Node.js 是什么 ? 是一个让 javascript 运行在服务器端的平台, 以前javascript只能运行在浏览器中, node.js 可以解析 javascript.
CommonJS 试图设计一套Javascript的规范.
Node.js 的引擎是 google 的 V8 引擎.
Node.js 不运行在浏览器中,所以也就不存在 JavaScript 的浏览器兼容性问题,你可以放心地使用 JavaScript 语言的所有特性。
Node.js 能做什么
Node.js 内建了 HTTP 服务器支持, 也就是说你可以轻而易举地实现一个网站和服务器的组合。这和 PHP、Perl 不一样,因为在使用 PHP 的时候,
必须先搭建一个 Apache 之类的HTTP 服务器, 然后通过 HTTP 服务器的模块加载或 CGI 调用,才能将 PHP 脚本的执行结果呈现给用户.
补充: HTTP服务器, HTTP是网络传输协议, HTTP服务器简单点说, 就是返回给客户端网页的服务器.
异步I/O 与事件驱动
Node.js 在执行的过程中会维护一个事件队列, 程序在执行时进入事件循环等待下一个事件到来,
每个异步式 I/O 请求完成后会被推送到事件队列,等待程序进程进行处理。
例如,对于简单而常见的数据库查询操作,按照传统方式实现的代码如下:
res = db.query('SELECT * from some_table');
res.output();
以上代码在执行到第一行的时候,线程会阻塞,等待数据库返回查询结果,然后再继续处理。然而,由于数据库查询可能涉及磁盘读写和网络通信,
其延时可能相当大(长达几个到几百毫秒,相比CPU的时钟差了好几个数量级),线程会在这里阻塞等待结果返回.
看看Node.js是如何解决这个问题的:
db.query('SELECT * from some_table', function(res) {
res.output();
});
这段代码中 db.query 的第二个参数是一个函数,我们称为回调函数。进程在执行到db.query 的时候,不会等待结果返回,
而是直接继续执行后面的语句,直到进入事件循环。当数据库查询结果返回时,会将事件发送到事件队列,等到线程进入事件循环以后,才会调
用之前的回调函数继续执行后面的逻辑。
Node.js 的异步机制是基于事件的. 上例中, 就是异步执行的例子. 所有的磁盘 I/O、网络通信、数据库查询都以非阻塞的方式请求,
返回的结果由事件循环来处理。Node.js 进程在同一时刻只会处理一个事件,完成后立即进入事件循环检查并处理后面的事件。这样做的好处是,
CPU 和内存在同一时间集中处理一件事,同时尽可能让耗时的 I/O 操作并行执行。
这种异步事件模式的弊端也是显而易见的,因为它不符合开发者的常规线性思路,往往需要把一个完整的逻辑拆分为一个个事件,增加了开发和调试难度.
Node.js 的性能
CommonJS
CommonJS 试图定义一套普通应用程序使用的API, 从而填补 JavaScript 标准库过于简单的不足.
安装&配置 Node.js
以windows为例 : 直接下载 node.js
http://nodejs.cn/
通过这种方式安装的 Node.js 还自动附带了 npm, 我们可以在命令提示符中直接输入 npm 来使用它.
注 : eclipse node插件: http://www.nodeclipse.org/updates/