Node.js 初学~
其技术上最大的卖点是非阻塞的I/O和基于事件的异步处理机制。
后端没有什么深入研究,一直对其不是很了解。
透过一个例子看 非阻塞 与 通常的 阻塞
var text = readFileSync("sample.html");//执行完才会进行下一步
console.log(text);
//第一个例子 必须等到 readFileSync 读完文件, 才会有值的接受 以及后来的打印。
阻塞I/O会导致线程等待,从而造成线程资源浪费,因为当应用服务器处理请求时,需要等待I/O执行结束才能继续处理。
readFile("sample.html", function(err, text) {
console.log(text); //
});
console.log("xxx");
//这个例子 可以看出 回调在这里的应用,在这里 读文件与 console.log('xxx'); 同步进行,各做各的事,等读完文件 在执行里面的console.log(text) 。
这就是非阻塞的特点。
Node有一个无需I/O等待或执行环境切换的单独执行环境。Node的I/O调用会转换为请求处理函数,当某些数据可用时事件轮询会调度事件让这些函数工作。事件轮询和事件处理程序模型差不多,就像浏览器中的JavaScript一样。程序的执行最好能快速返回到事件循环中,以便马上调度下一个可执行的任务。
编写基于Node.js的模块
Node.js遵循了CommonJS 的一些规范 比如modules。http://www.commonjs.org/
所有定义都写在 module.exports 下
由于浏览器端 没有改 对象,所以我们写之前 可以先判断下。
//这是underscore.js写的基于 node 、或者 window下的定义方法
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
}
exports._ = _;
} else {
root._ = _; //root为window
}