欢迎进入Node.js世界

官网上(http://www.nodejs.org )给Node下的定义是:”一个搭建在Chrome JavaScript 运行时上的平台,用于构建高速、可伸缩的网络程序。Node.js采用的事件驱动、非阻塞I/O模型,使它既轻量又高效,并成为构建运行在分布式设备上的数据密集型实时程序的完美选择“。

异步和事件触发:浏览器

Node为服务端JavaScript提供了一个事件驱动的、异步的平台。它把JavaScript带到服务端中的方式跟浏览器把JavaScript带到客户端的方式几乎一模一样。了解浏览器的工作原理对我们了解Node的工作原理会有很大帮助。它们都是事件驱动(用事件轮询)和非阻塞的I/O处理(用异步I/O)。下面举个例子说明这是什么意思。

我们来看一小段jQuery 用XMLHttpRequest(XHR)做Ajax 请求的代码:

$.post(‘/resource.json‘,function(data){//I/O不会阻塞执行
    console.log(data);
})
//脚本继续执行

这个程序会发送一个到resource.json的HTTP请求。当响应返回时会调用带着参数data的匿名函数(在这个上下文中的回调函数),data就是从那个请求中得到的数据。注意,代码没有写成下面这样:

var data=$.post(‘/resource.json‘);//在I/O完成之前程序会被阻塞
console.log(data);

在这个例子中,假定对resource.json的响应在准备好后会存储在变量data中,并且在此之前函数console.log 不会执行。I/O操作(Ajax 请求)会阻塞脚本继续执行,直到数据准备好。因为浏览器是单线程的,如果这个请求用了400ms 才返回,那么页面上的其他任何事件都要等到那之后才能执行。可以想象一下,如果一幅动画被停住了,或者用户试着跟页面交互时动不了,那种用户体验有多糟糕。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。