在JavaScript中测试函数计算速度的最准确方法是什么?

时间:2013-12-29 03:52:23

标签: javascript performance performance-testing

我需要比较一些代码的计算速度,但我不确定最好的方法是什么。是否有某种内置计时器可以做到这一点?是否有可能以纳秒为单位获得计算速度,还是需要处理JavaScript通常使用的毫秒数?

6 个答案:

答案 0 :(得分:2)

我偶然发现了performance API。您正在寻找的可能是Performance.now(),这将为您提供微秒级的优势。

  

Performance.now() 方法返回DOMHighResTimeStamp,经过测量   以毫秒为单位,精确到千分之一毫秒等于   自PerformanceTiming.navigationStart以来的毫秒数   属性和方法调用(source).

MDN提供的示例是:

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

您可以用来多次测试特定短代码的性能的函数,您可以使用以下代码:

/**
 * Finds the performance for a given function
 * function fn the function to be executed
 * int n the amount of times to repeat
 * return array [time elapsed for n iterations, average execution frequency (executions per second)]
 */
function getPerf(fn, n) {
  var t0, t1;
  t0 = performance.now();
  for (var i = 0; i < n; i++) {
    fn(i)
  }
  t1 = performance.now();
  return [t1 - t0, repeat * 1000 / (t1 - t0)];
}

返回单次执行fn(i)所花费的时间(以毫秒为单位),以及执行频率(每秒执行次数)。 n值越高,其精度越高,但测试所需的时间越长。参数i可以包含在要测试的函数中,该函数包含函数的当前迭代。

答案 1 :(得分:1)

答案 2 :(得分:1)

您应该使用jsPerf来获得具有统计显着性的结果。由于浏览器中涉及的各种JIT系统,性能结果可能会有很大差异,因此它使用的jsPerf或Benchmarking.js库将运行您的代码多次,以获得良好的结果。但请注意,如果一个函数在几纳秒内运行,则担心其性能几乎总是不必要的。

答案 3 :(得分:0)

您可以使用Internet Explorer的开发人员工具脚本分析器。我相信Chrome和Firefox也有类似的工具。它会在几毫秒内给你。但如果花费的时间少于一毫秒,那么我认为它也将以纳秒显示。

答案 4 :(得分:0)

您可以尝试内置浏览器的分析功能:

它们功能丰富,无需编写任何代码即可直接使用

答案 5 :(得分:0)

https://github.com/anywhichway/benchtest是另一个工具,它仅重新使用Mocha单元测试。