如何测量一个函数执行所花费的时间

我需要以毫秒为单位获得执行时间。

我最初在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 。 不是当你想要得到时间或测量任何东西。

    链接地址: http://www.djcxy.com/p/3169.html

    上一篇: How to measure time taken by a function to execute

    下一篇: each over an array in JavaScript?