协慌网

登录 贡献 社区

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

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

我最初在 2008 年问过这个问题。然后,接受的答案是使用新的 Date()。getTime()但是,我们现在都同意使用标准的performance.now() API 更合适。因此,我正在改变对此问题的接受答案。

答案

使用performance.now()

var t0 = performance.now();

doSomething();   // <---- The function you're measuring time for 

var t1 = performance.now();
console.log("Call to doSomething took " + (t1 - t0) + " milliseconds.")

NodeJs :需要导入performance


使用console.time (非标准) 生活标准

console.time('someFunction');

someFunction(); // Whatever is timed goes between the two "console.time"

console.timeEnd('someFunction');

注意
传递给time()timeEnd()方法的字符串必须匹配
计时器按预期完成)。

console.time()文档:

  1. 有关的 NodeJS 文档
  2. MDN(客户端)文档

使用新的 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的简单版本。


此外, 不要将Date用于任何事情,因为它受 “系统时间” 变化的影响。这意味着当用户没有准确的系统时间时,我们得到无效结果 - 如 “负时间” -

2014 年 10 月,我的系统时钟乱了, 猜猜是什么 .... 我打开了 Gmail,看到了我所有的一天的电子邮件 “ 0 分钟前发送”。我认为 Gmail 应该由 Google 的世界级工程师构建.......

(将你的系统时钟设置为一年前,然后转到 Gmail,这样我们都可以大笑。也许有一天我们会为 JS Date设置一个耻辱之门 。)

Google Spreadsheet 的now()函数也遇到了这个问题。

您将要使用的唯一时间Date是当你想要显示的用户他的系统时钟的时间。不是当你想要得到时间或测量任何东西。