Node.js执行时间与异步编程
什么是异步编程
在程序中,调用一个函数后不等待函数执行返回,继续执行后边的代码。
console计算代码执行时间间隔
在nodejs的api中的console对象提供了console.time(label)
:标记当前时间
与console.timeEnd(label)
:获取标记范围的执行时间
来看看例子:
//etime.js
console.time("marker-elements");
for (var i = 0; i < 100000; i++) {
;
}
console.timeEnd("marker-elements");
执行结果:12ms(毫秒)的样子
==注意:由于nodejs是异步执行的,比如说你做了IO操作加了回调函数,那么这个时间标记按照我们流程化的思路放timeEnd函数就是不对的。==
来看看一个例子(读取大文件[30MB左右])[这个IO操作比较消耗时间]:
// readfile1.js
//加载File System模块
var fs = require("fs");
//标记当前时间
console.time('rf-time');
fs.readFile("a.mp4",function(err, data){
if(err){
console.log("load Failure!");
}else{
console.log("load complete!");
}
});
//打印该rf-time标记执行时间差
console.timeEnd("rf-time");
执行时间很快几毫秒,来修改一下代码:
// readfile2.js
//加载File System模块
var fs = require("fs");
//标记当前时间
console.time("rf-time");
fs.readFile("a.mp4", function(err, data){
if(err){
console.log("load Failure!");
}else{
console.log("load complete!");
console.timeEnd("rf-time"); //打印该rf-time标记执行时间差
}
});
执行时间是不是就变成了20多毫秒。
这个例子让我们真实的感受到了nodejs的异步执行的高效,我们可以将计算量高的代码异步处理,而不用等到计算机处理完才响应给用户。
总结
- 1.使用time和timeEnd函数标记代码块执行时间
- 异步编程依托于回调来实现,而使用回调不一定就是异步编程
- 异步编程下的函数间数据传递、数组遍历和异常处理与同步编程有很大差别