我需要比较一些代码的计算速度,但我不确定最好的方法是什么。是否有某种内置计时器可以做到这一点?是否有可能以纳秒为单位获得计算速度,还是需要处理JavaScript通常使用的毫秒数?
答案 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)
您可能正在寻找console.time
。请参阅https://developer.mozilla.org/en-US/docs/Web/API/console?&redirectslug=DOM%2Fconsole#Timers。
答案 2 :(得分:1)
您应该使用jsPerf来获得具有统计显着性的结果。由于浏览器中涉及的各种JIT系统,性能结果可能会有很大差异,因此它使用的jsPerf或Benchmarking.js库将运行您的代码多次,以获得良好的结果。但请注意,如果一个函数在几纳秒内运行,则担心其性能几乎总是不必要的。
答案 3 :(得分:0)
您可以使用Internet Explorer的开发人员工具脚本分析器。我相信Chrome和Firefox也有类似的工具。它会在几毫秒内给你。但如果花费的时间少于一毫秒,那么我认为它也将以纳秒显示。
答案 4 :(得分:0)
您可以尝试内置浏览器的分析功能:
它们功能丰富,无需编写任何代码即可直接使用
答案 5 :(得分:0)
https://github.com/anywhichway/benchtest是另一个工具,它仅重新使用Mocha单元测试。