我想在JavaScript中计算函数的平均运行时间,如下所示:
time = 0;
while(1000) {
time1 = performance.now();
function();
time2 = performance.now();
time += (time2-time1);
}
问题是只有第一个循环的时间间隔约为60ms
,而后续循环的间隔几乎为零。
所以我将代码更改为:
time1 = performance.now();
while(1000000) {
function();
}
time2 = performance.now();
time = (time2-time1);
运行时间约为4 seconds
。
我想也许是因为自动优化。
如果是这种情况,是否有任何方法可以关闭优化?
答案 0 :(得分:0)
您最有可能导致浏览器将该代码移交给其JIT编译器。第一次运行总是通过解释器(慢)。热代码通过JIT,然后使用生成的本机(快速)代码。
这是自动的,通常无法控制。您可以在脚本中使用“with”来禁用Firefox JIT编译器。
with({}) {}
将其添加到脚本的顶部,并且将禁用脚本的JIT。
答案 1 :(得分:0)
您还可以使用console.time和console.endTime函数计算运行时间。
示例:
console.time('profile 1');
for ( var i=0; i < 100000; i++) {
var arr = new Array();
}
console.timeEnd('profile 1');//profile 1: 108.492ms
console.time('profile 2');
for ( var i=0; i < 100000; i++) {
var arr = [];
}
console.timeEnd('profile 2');//profile 2: 81.907ms