console.time()在node.js中安全吗?

我在前面有一段node.js代码,看起来像这样:

console.time("queryTime"); doAsyncIOBoundThing(function(err, results) { console.timeEnd("queryTime"); // Process the results... }); 

当然,当我在我的(否则空闲的)开发系统上运行这个,我得到一个很好的控制台消息,像这样:

 queryTime: 564ms 

但是,如果我把它投入生产,那么不会有几个同时进行的asynchronous调用,而且它们每个都会覆盖前一个定时器吗? 还是节点有一种神奇的执行上下文,给每个“执行线程”一个单独的控制台计时器命名空间?

只需使用独特的标签,这将是安全的。 这就是为什么您使用标签来唯一标识开始时间的原因。

原因很简单: console.timeconsole.timeEnd是世界上最简单的函数之一( source ):

 Console.prototype.time = function(label) { this._times.set(label, Date.now()); }; Console.prototype.timeEnd = function(label) { var time = this._times.get(label); if (!time) { throw new Error('No such label: ' + label); } var duration = Date.now() - time; this.log('%s: %dms', label, duration); }; 

只要你不小心使用一个标签两次,一切都会按照预期工作。 还要注意, node通常只有一个执行线程。

这个简单的代码不会工作吗?

 var labelWithTime = "label " + Date.now(); console.time(labelWithTime); // Do something console.timeEnd(labelWithTime);