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(&#039;rf-time&#039;);
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函数标记代码块执行时间
  • 异步编程依托于回调来实现,而使用回调不一定就是异步编程
  • 异步编程下的函数间数据传递、数组遍历和异常处理与同步编程有很大差别
来源: 雨林博客(www.yl-blog.com)