【发布时间】:2013-12-29 03:52:22
【问题描述】:
我需要比较一些代码的计算速度,但我不确定最好的方法是什么。是否有某种内置计时器可以做到这一点?是否有可能获得以纳秒为单位的计算速度,还是我需要处理 JavaScript 通常使用的毫秒数?
【问题讨论】:
标签: javascript performance performance-testing
我需要比较一些代码的计算速度,但我不确定最好的方法是什么。是否有某种内置计时器可以做到这一点?是否有可能获得以纳秒为单位的计算速度,还是我需要处理 JavaScript 通常使用的毫秒数?
【问题讨论】:
标签: javascript performance performance-testing
我遇到了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 可以包含在要测试的函数中,其中包含函数的当前迭代。
【讨论】:
【讨论】:
您应该使用jsPerf 来获得具有统计意义的结果。由于浏览器中涉及各种 JIT 系统,性能结果可能会有很大差异,因此 jsPerf 或它使用的 Benchmarking.js 库将根据需要多次运行您的代码以获得良好的结果。但请注意,如果一个函数仅在几纳秒内运行,则几乎总是没有必要担心它的性能。
【讨论】:
您可以尝试浏览器内置的分析功能:
它们功能丰富,无需编写任何代码即可开箱即用
【讨论】:
您可以使用 Internet Explorer 的 Developer Tools Script Profiler。我相信 Chrome 和 Firefox 也有类似的工具。它会在几毫秒内给你。但是如果花费的时间少于一毫秒,那么我认为它也会以纳秒为单位显示。
【讨论】:
另一个工具是 https://github.com/anywhichway/benchtest,它只是重复使用 Mocha 单元测试。
【讨论】: