在程序中,调用一个函数后不等待函数执行返回,继续执行后边的代码。
在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函数标记代码块执行时间
异步编程依托于回调来实现,而使用回调不一定就是异步编程
异步编程下的函数间数据传递、数组遍历和异常处理与同步编程有很大差别