2014-03-25 90 views
0

我要计算一个函数的平均运行时间在JavaScript这样的:Caculating功能运行时间

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

我假设只是在任意的参数投掷会有所帮助,即'函数(I);'与循环迭代计数被'i'。只是一个假设,但没有测试过这一点。 – SmokeyPHP

回答

0

您最有可能导致浏览器将该代码交给其JIT编译器。第一次运行总是通过解释器(缓慢)。热门代码通过JIT,然后使用生成的本机(快速)代码。

这是自动的,一般不在您的掌握之中。您可以通过在脚本中使用'with'来禁用Firefox JIT编译器。

with({}) {} 

将此添加到您的脚本的顶部,并且您的脚本的JIT将被禁用。

0

您还可以使用console.timeconsole.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