面向非专业程序员的node.js介绍,专业程序员请回退
介绍Node.js时,一般都会说它是运行在服务器环境中的JavaScript解释器,有了它,我们可以直接在服务器上跑Javascript代码,就像跑PHP,ruby和java代码一样。
实际上Node.js并不是唯一的服务端Javascript解释器,它还有很多同类产品。而且Javascript最初就是用在服务端的编程语言。当年为了跟微软在互联网上抢地盘,网景要为非专业程序员打造一款小清新的解释型语言,以便跟Java互补。终于在1994年12月推出了用在 Netscape Enterprise Server上的LiveScript,小名Mocha。1995年,这门语言起了个当时看来很洋气的名字,Javascript,推出了客户端版本,作为网景浏览器的一部分一起发布。Javascript可以让浏览器跟用户交互,可以控制浏览器,可以跟后台进行异步通讯(该项技术在1996年出现在微软的IE中),并修改浏览器中所显示的内容。可网景终于输掉了这场战争,才使得服务端Javascript变成了今天的一个噱头。
Node.js基于Google给Chrome浏览器写的V8引擎, 现就职于Joyent 的Ryan Dahl (1)根据自己的需要做了些定制,比如读写文件系统,以及处理HTTP请求、返回HTTP响应的能力。其技术上最大的卖点是非阻塞的I/O和基于事件的异步处理机制。
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.-- http://nodejs.org
不过这都不是什么突破性创新,我看中的是他的简单高效和庞大的类库,下面是今天(2013年4月22日)npmjs.org上给出的数据:
Node Packaged Modules
Total Packages: 28 092
126 938 downloads in the last day
8 502 793 downloads in the last week
31 970 743 downloads in the last month
(1) 开源软件的生命力和他身后的支撑力量紧密相关。Ryan Dahl不是一个人在战斗,他现在把node.js掌门人的位置转给了其同事Isaac Schlueter(npm的主创人员)
既然他吆喝自己的非阻塞I/O和基于事件的异步式处理机制,我们就先来看一下这有什么好处。技术上有一句至理名言:“万般皆破,唯快不破”。所有拿得出手的东西,首先都要围绕一个快字做功夫。按非专业的说法,Node每秒可以用一个线程处理上千条请求,你甚至可以在一个线程上运行几个HTTP服务器。Nginx用的就是这项技术,完胜老大Apache,有图为证。
先看处理能力:
再看所占资源:
就一个字,状态稳定,多快好省!至于Node的图。。。请领会精神,或参考专业人士的建议。
至于他为什么这么强,我们先来看一个小例子:
阻塞版:
var text = readFileSync("sample.html")
console.log(text); // executed after the file has been read completely
非阻塞事件驱动版:
readFile("sample.html", function(err, text) {
console.log(text); // executed after the file has been read completely
});
console.log("xxx"); // this line will be executed immediately
第一个是一旦开始读文件,就等着,读完再接着干别的。而第二个在开始读文件的同时给一个回调函数,然后你读你的,我该干嘛干嘛,等你读完了,再调用回调函数处理。所以第二个快,能充分利用快速的处理资源。
如果还有疑问,想了解更深层的技术问题,有四个字与你共勉:难得糊涂。对于我等非专业程序员,知道这个模式,知道实际效果已经够了。