如何测量一个函数执行所花费的时间
我需要以毫秒为单位获得执行时间。
我最初在2008年问过这个问题。然后接受的答案是使用新的Date()。getTime()但是,我们现在都可以同意使用标准的performance.now()API更合适。 因此,我正在改变对这一问题的接受答案。
你可以使用console.time :(非标准)
console.time('someFunction');
someFunction(); // run whatever needs to be timed in between the statements
console.timeEnd('someFunction');
注意 :
传递给time()
和timeEnd()
方法的字符串必须匹配
(定时器按预期完成)。
更新
您可以使用标准的performance.now() API,如下所示:
var t0 = performance.now();
doSomething();
var t1 = performance.now();
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.")
使用新的Date()。getTime()
getTime()方法返回自1970年1月1日午夜以来的毫秒数。
恩。
var start = new Date().getTime();
for (i = 0; i < 50000; ++i) {
// do something
}
var end = new Date().getTime();
var time = end - start;
alert('Execution time: ' + time);
不要使用Date()。 参见下文。
使用performance.now()
:
<script>
var a = performance.now();
alert('do something...');
var b = performance.now();
alert('It took ' + (b - a) + ' ms.');
</script>
它适用于:
IE 10 ++
FireFox 15 ++
Chrome 24 ++
Safari 8 ++
Opera 15 ++
Android 4.4 ++
等等
console.time
对你来说可能是可行的 ,但它是非标准的§:
这个功能是非标准的,不在标准轨道上。 不要在面向Web的生产站点上使用它:它不适用于每个用户。 实现之间也可能存在很大的不兼容性,并且行为在未来可能会发生变化。
除了浏览器支持, performance.now
似乎有可能提供更准确的计时,因为它似乎是console.time
版本。
<rant>另外, 不要使用Date
来做任何事情,因为它受到“系统时间”变化的影响。 这意味着我们会得到无效的结果 - 例如“否定时间” - 当用户没有准确的系统时间时:
2014年10月,我的系统时钟出现故障,猜测是什么....我打开了Gmail,看到了我今天的所有电子邮件都是“ 0分钟前发送的”。 而且我认为Gmail应该由来自Google的世界级工程师构建.......
(将系统时钟设置为一年前,然后转到Gmail,这样我们都可以大笑一场,也许有一天我们会为JS Date
设立一个耻辱大厅。)
Google Spreadsheet的now()
函数也会遇到这个问题。
只有当你想向用户显示他的系统时钟时,你才会使用Date
。 不是当你想要得到的时间或测量任何东西。