浏览器控制台和计算多个javascript执行时间差异

时间:2013-05-26 13:21:37

标签: javascript performance javascript-debugger

我可以很容易地做到这一点:

console.time('mytimer');
doSomeWork();
console.timeEnd('mytimer');

但是可以在多个函数中计算时间。我需要在全局变量中定义脚本的开始时间。然后在多个函数内部,我将写出自时间开始以来经过了多少毫秒。并写下函数的名称:这样:

console.time('mytimer');
doSomeWork() {
  // console.log(difference between now and "mytimer"s start time)
  // console.log(name of the function: doSomeWork())
};
doSomeWork2() {
  // console.log(difference between now and "mytimer"s start time)
  // console.log(name of the function: doSomeWork2())
};
doSomeWork3() {
  // console.log(difference between now and "mytimer"s start time)
  // console.log(name of the function: doSomeWork3())
};
console.timeEnd('mytimer');

我会在Chrome 26+中使用它来解决调试问题,因此使用浏览器相关函数(例如:arguments.callee.name)不是问题。

编辑:清除我的问题。
这有效:

console.time('myTimer1');
console.timeEnd('myTimer1');

这不起作用:

console.time('myTimer2');
console.time('myTimer2');

编辑:当然可以写太多的计时器并检查每个计时器的时间。但是我需要知道自从javascript代码在每一圈开始以来经过的时间。

2 个答案:

答案 0 :(得分:0)

如果您需要特定功能的时间,我想您知道可以通过console.time()和console.timeEnd()的参数来实现它们。有关它的更多信息https://developers.google.com/chrome-developer-tools/docs/console/

根据我对您的问题的理解,您需要进行基准分析。

我已经定义了以下方法,您可以使用它们以毫秒为单位获得单圈时间。


更新:使用performance api作为此类用例的推荐API。

console.lapStart = function(name){
     window[name] = window[name] || {};
     window[name].globalTimer = performance.now();
}
console.showLap = function(name){
     currTime = performance.now();
     var diff = currTime  - window[name].globalTimer;
     console.log(arguments.callee.name, diff);
}
console.lapEnd = function(name){
     currTime = performance.now();
     var diff = currTime  - window[name].globalTimer;
     console.log(arguments.callee.name, diff);
     delete window[name]
}

请注意,这是粗略的代码,应该只在dev中运行。否则,它可能会在全球物体上留下不良痕迹,并在嘴上留下不好的味道。

答案 1 :(得分:0)

有一个解决方案,这是生活水平。好像已经在chrome和主要浏览器以及nodejs上使用了

https://developer.mozilla.org/en-US/docs/Web/API/Console/timeLog

console.time("answer time");
alert("Click to continue");
console.timeLog("answer time");
alert("Do a bunch of other stuff...");
console.timeEnd("answer time");
The