繁体   English   中英

JavaScript setTimeout for循环中的性能测试

[英]JavaScript setTimeout in for Loop for Performance Test

我正在尝试使用setTimeout进行使用console.time()和console.timeEnd()的性能测试。 但是,setTimeout()不会延迟for()循环。

这是JS小提琴:

 // Start the timer. console.time('testFor'); for ( i = 0; i < 5; i++ ) { setTimeout( console.log('The number is ' + i), 2000 ); } // End the timer, get the elapsed time. console.timeEnd('testFor'); 

如何使setTimeout()在脚本中起作用,为什么它对我不起作用?

其他人已经为您的问题提出了极好的解决方案-我想仔细检查一下您的代码所发生的情况。

setTimeout不会延迟代码的升级(就像其他语言的sleep一样),而是推迟运行另一个代码块。 这个奇怪的概念可能很难理解。 考虑以下示例:

console.time("Main Program");
console.time("Defered Code");

setTimeout(deferedCode, 1000);

console.timeEnd("Main Program");

function deferedCode() {
    console.timeEnd("Defered Code");
}

如果在运行此代码后查看控制台,我们将几乎立即看到“主程序”和“延迟代码”的打印。

我们已经要求setTimeout在将来的1000 ms的时间运行函数deferedCode ,然后让其余代码运行。

还要注意, deferedCode传递给不带() setTimeout 我们将函数本身而不是deferedCode的结果deferedCodesetTimeout以便setTimeout可以选择何时运行它。

您可以使用循环来实现,而无需循环:

var i = 0;

var logNumber = function(){
    console.log('The number is ' + i);
    i++;
    if(i < 5){
        setTimeout(logNumber, 2000);
    }
}

logNumber();

setTimeout是异步的。 如果要定期调用某些代码,请使用setInterval函数。

我认为这段代码与您要执行的操作很接近:

// Start the timer.
console.time('testFor');

var i = 0;
var finish = 5;
var t = setInterval(function() {
  if (i < finish) {
    console.log('The number is ' + i);
    i++;
  } else {
    clearInterval(t);
    // End the timer, get the elapsed time.
    console.timeEnd('testFor');
  }
}, 2000);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM