node.js
目录
1发展史编辑
-
2009年5月,Ryan Dahl在GitHub上发布了最初版本的部分Node.js包,随后几个月里,有人开始使用Node.js开发应用。
-
2009年11月和2010年4月,两届JSConf大会都安排了Node.js的讲座。
2特性编辑
3模块编辑
4安装编辑
5版本发布编辑
-
tls: 修复偶尔发生的挂起和部分显示 (Fedor Indutny) - 修复 "npm ERR! cb() never called!"
-
uv: 升级至 v0.10.17
-
npm: 升级至 1.3.11
-
readline: 从控制字符开始处理输入 (Eric Schrock)
-
configure: 新增 mips-float-abi (soft, hard) 选项 (Andrei Sedoi)
-
stream: 对象模式改为允许否值 (isaacs)
-
tls: 阻止读取返回冗余的值 (Nathan Rajlich)
-
tls: NPN 协议改为连接到本地 (Fedor Indutny)
-
uv: 升级至 v0.10.15
-
stream: 不阻塞 unset _events 属性 (isaacs)
-
stream: 传递的 'buffer' 用可解码的方式进行编码 (isaacs)
-
uv: 升级至 v0.10.14
-
http_parser: 不接收 PUN/GEM 方法作为 PUT/GET (Chris Dickinson)
-
tls: 修复当读取的 ssl 被销毁时的声明 (Fedor Indutny)
-
stream: 当监听器被移除时抛出 'error' (isaacs)
-
dgram: 修复错误的 send() 的参数的声明 (Ben Noordhuis)
-
readline: 在退出终端原始模式前暂停 stdin (Daniel Chatfield)
-
v8: 修复 CVE-2013-2882 的后门
-
npm: 升级至 1.3.8
-
crypto: 修复 assert() 的十六进制数据输入 (Ben Noordhuis)
-
crypto: 修复 randomBytes() 错误路径的内存泄漏 (Ben Noordhuis)
-
events: 修复内存泄漏,不暴露事件名称 (Ben Noordhuis)
-
http: 正确处理 hex/base64 编码 (isaacs)
-
http: 提升 res.write(buf) 性能 (Ben Noordhuis)
-
stream: 修复双管道错误显示 (Eran Hammer)
6集成开发环境编辑
7示例程序编辑
-
var http = require('http');
-
server = http.createServer(function (req, res) {
-
res.writeHeader(200, {"Content-Type": "text/plain"});
-
res.end("Hello World\n");
-
});
-
server.listen(8000);
-
console.log("httpd start @8000")
前端页面开发之Node.js初学者指南
[日期:2012-08-24] | 来源:it168 作者:景保玉 | [字体:大 中 小] |
什么是Node.js
Node是一个Javascript运行环境(runtime)。实际上它是对GoogleV8引擎(应用于Google Chrome浏览器)进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。例 如,在服务器环境中,处理二进制数据通常是必不可少的,但Javascript对此支持不足,因此,V8.Node增加了Buffer类,方便并且高效地 处理二进制数据。因此,Node不仅仅简单的使用了V8,还对其进行了优化,使其在各环境下更加给力。
发展历史
2009年2月,Ryan Dahl在博客上宣布准备基于V8创建一个轻量级的Web服务器并提供一套库。
2009年5月,Ryan Dahl在GitHub上发布了最初版本的部分Node.js包,随后几个月里,有人开始使用Node.js开发应用。
2009年11月和2010年4月,两届JSConf大会都安排了Node.js的讲座。
2010年年底,Node.js获得云计算服务商Joyent资助,创始人Ryan Dahl加入Joyent全职负责Node.js的发展。
2011年7月,Node.js在微软的支持下发布Windows版本。
初识Node.js
要开始使用Node.js的,必须先了解Node.js和传统的服务器端脚本环境(如:PHP,Python和Ruby的,等等)之间的差异。
相信大部分读者都已经对ajax编程十分熟悉了,其中ajax中的a(asynchronous)指的是异步编成,所以在node.js世界中,一切的方法都是异步执行的,因此比如你需要程序中阅读一个操作系统中的文件,则必须指定一个回调方法,则在读取完这个文件后,则会执行这个回调方法的内容。
下面,就Node.js跟其他语言来做个小的对比,读者可以可以看出其中的端倪。因为Node.js不是服务器运行环境,它实际上是在服务端运行的javascript,因此在性能上是十分高效的。下面是Node.js编写的一个小程序代码:
max = 1000000000 ;
var d = Date .now();
for (i = 0 ; i < max; i ++ ) {
a = 1234 + 5678 + i;
b = 1234 * 5678 + i;
c = 1234 / 2 + i;
}
而相同的PHP代码如下:
$a = null ;
$b = null ;
$c = null ;
$i = null ;
$max = 1000000000 ;
$start = microtime( true );
for ($i = 0 ; $i < $max; $i ++ ) {
$a = 1234 + 5678 + $i;
$b = 1234 * 5678 + $i;
$c = 1234 / 2 + $i;
}
var_dump(microtime( true ) - $start);
下面的表是两者对比的性能列表,以微秒为单位,如下:
在命令行执行这两个应用程序,所以没有服务器端的延迟执行。对每个应用分别测试10次,取平均值,结果。如果循环的次数比较少,则php的速度快点,但这种优势,随着迭代次数的增加而减少,会发现都比nodejs慢了!
可以看到Node.js速度是很快,但必须正确地使用它。下面介绍Node.js中几个重要的概念:
Modules模块
Node.js使用Module模块去划分不同的功能,以简化应用的开发。Modules模块有点象C语言中的类库。每一个Node.js的类库都包含了十分丰富的各类函数,比如http模块就包含了和http功能相关的很多函数,可以帮助开发者很容易地对比如http,tcp/udp等进行操作,还可以很容易的创建http和tcp/udp的服务器。
要在程序中使用模块是十分方便的,只需要如下:
在这里,引入了http类库,并且对http类库的引用存放在http变量中了。这个时候,node.js会在我们应用中搜索是否存在node_modules的目录,并且搜索这个目录中是否存在http的模块。如果node.js找不到这个目录,则会到全局模块缓存中去寻找,用户可以通过相对或者绝对路径,制定模块的位置,比如:
var myModule = require('./myModule.js');
模块中包含了很多功能代码片断,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同一个模块中被调用。当然,可以将某些方法和变量暴露到模块外,这个时候可以使用export是对象去实现,比如如下代码:
exports.area = function (r) {
return PI * r * r;
};
exports.circumference = function (r) {
return 2 * PI * r;
};
上面的代码中,创建了PI这个变量,这个变量只能在同一个模块中被访问,并且用exports分别将两个方法area和circumference对外暴露出去了,因此在其他模块中可以访问。
尽量避免使用全局变量
Node.js是使用Google的V8 JavaScript引擎。因此,我们应该遵循的最佳实践去进行客户端的开发。比如,我们应该尽量避免将所有东西都放在全局变量中。然而,这并不总是可能的。在node.js中,要声明全局变量的话,甚至可以省略var关键字,这样你可以很容易地创建一个全局变量的函数,比如:
globalVariable = 1;
globalFunction = function () { ... };
但是尽可能的话,还是应该少在Node.js中到处使用全局变量。
Node.js的安装
下面介绍下Node.js的安装,首先在nodejs.org的网站上根据操作系统下载相关的安装包,对于linux下的安装,可以如下进行:
sudo apt-get update
sudo apt-get install node
或者:
sudo aptitude update
sudo aptitude install node
Node.js就会在sid库,现在可以将它们增加到sources来源列表中
sudo echo deb http://ftp.us.debian.org/debian/ sid main > /etc/apt/sources.list.d/sid.list
但要注意的是,在完成安装后,需要移走/etc/apt/sources.list.d/sid.list。