作为后端JavaScript的运行平台,Node保留了前端JavaScript中些熟悉的接口,没有改写语言本身的任何特性,依旧基于作用域和原型链,区别在于它将前端中广泛应用的思想作用到了服务器端。下面我们来看看Node相对于其他语言的一些特点。
1、异步I/O
关于I/O,向前端工程师解释起来会比较容易一些,因为发起Ajax请求用对于前端工程而言是再熟悉不过的场景了。下的用于发起一个Ajax请求:
$(Function(){ $.post('/url', {title: '入出Node.js'}, function (data) { console.log('收到响应结果'); }); console.log('发送Ajax结束'); });
熟悉异步调用的的用户必然知道,‘收到响应结果’是在‘发送Ajax结束’之后输出的。在用$.post() 后,后续代码是立即执行的,而收到响应结果所占用的时间是不确定的。
异步执行的特点就是:无需等待服务器响应,继续执行后续动作,这也是异步和同步最本质的区别。Node.Js的绝大多数执行过程是异步的!
在Node中异步I/O也很常见。以读取文件为例:
var fs = require('fs'); fs.readFile('/path', function (err, file) { console.log('读取第一个文件完成') }); console.log('发起读取第二个文件');
Node中的异步I/O和上述中的异步调用执行步骤是一样的,在读取第一个文件的过程中,无需等待服务器响应,就会紧接着发起读取第二个文件。因此,在本案例中,发起读取第二个文件 是在 读取第一个文件完成 之前输出的!
同步操作和异步操作的区别相信大家都明白了!耗时方面:同步执行的结果是:1+1=2,异步执行的结果是:1+1<2
2、事件与回调函数
3、单线程