Node的特点
Node的特点有:异步I/O、事件与回调函数、单线程、跨平台
异步I/O
在Node中,异步I/O很常见,比如读取文件,代码如下
var fs = require('fs');
fs.readFile('/file/path', function (err, file) {
console.log('读取文件成功');
});
console.log('发起读取文件');
这里的“读取文件成功”是在“发起读取文件”之后输出的。读取文件本身是耗时的,所以在执行读取文件的时候,后边的程序会继续执行,所以直接打印了“发起读取文件”,等读取文件完成之后,才会执行Function
里边的程序,也就是最后才会打印“读取文件成功”。
如果有多个耗时的程序在执行,他们之间是互不影响的,无需等待之前的I/O调用结束再执行下一个,从而极大提升了效率。
事件与回调函数
JavaScript在前端担任了很多的职责,所以事件也得到了广泛的应用。
事件的编程方式具有轻量级、松耦合、只关注事务点等优势。
回调函数无处不在,这是因为在JavaScript中,我们将函数作为第一等公民来对待,可以将函数作为对象传递给方法作为实参进行调用。
单线程
Node其实是保持了JavaScript在浏览器中单线程的特点。而且在Node中,JavaScript与其余线程是无法共享任何状态的。单线程的最大好处是不用像多线程编程那样处处在意状态的同步问题,这里没有死锁的存在,也没有线程上下文交换所带来的性能上的开销。
Node的应用场景
Node应用的场景为:I/O密集型、是否不擅长CPU密集型业务、与遗留系统和平共处、分布式应用。
Node的使用者
- 前后端编程语言环境统一
- Node带来的高性能I/O用于实时应用
- 并行I/O使得使用者可以更高效地利用分布式环境
- 并行I/O,有效利用稳定接口提升Web渲染能力
- 云计算平台提供Node支持
- 游戏开发领域
- 工具类应用