如何计算在Javascript中for循环可以运行的最大次数?

如何计算在Javascript中for循环可以运行的最大次数?,javascript,memory-management,loops,for-loop,cpu-usage,Javascript,Memory Management,Loops,For Loop,Cpu Usage,在Javascript中,如果我们有以下代码: var j = 0; for(i=0; i<j; i++){ //JS Code } var j=0; 对于(i=0;i否,您无法计算此值,不同浏览器之间的差异太大。一些浏览器按时间执行此操作(例如,您的代码已运行超过X秒,但没有返回到浏览器;在Firefox 7上,默认值为10秒,但是),其他浏览器按操作次数执行此操作() 你最好的办法是重构代码,这样你甚至可以避免开始接近极限。如果你有大量的工作要做,把它分成块,然后使用超时值为0

在Javascript中,如果我们有以下代码:

var j = 0;

for(i=0; i<j; i++){
  //JS Code
}
var j=0;

对于(i=0;i否,您无法计算此值,不同浏览器之间的差异太大。一些浏览器按时间执行此操作(例如,您的代码已运行超过X秒,但没有返回到浏览器;在Firefox 7上,默认值为10秒,但是),其他浏览器按操作次数执行此操作()

你最好的办法是重构代码,这样你甚至可以避免开始接近极限。如果你有大量的工作要做,把它分成块,然后使用超时值为
0
setTimeout
一个接一个地运行这些块。这将返回到浏览器(超过
0
毫秒;具体时间长短将因浏览器和页面上的其他内容而异)

下面是一个在100000个迭代块中计数到10000000的示例:

function toAMillion() {
  var counter = 0,
      limit = 10000000,
      chunk = 100000;

  doAChunk();

  function doAChunk() {
    var target = Math.min(limit, counter + chunk);

    while (counter < target) {
      ++counter;
    }

    if (counter < limit) {
      // Schedule next chunk
      setTimeout(doAChunk, 0);
    }
    else {
      // Done
      display("Done, counter = " + counter);
    }
  }
}
函数{
变量计数器=0,
限额=10000000,
区块=100000;
doAChunk();
函数doAChunk(){
var target=Math.min(限制、计数器+区块);
while(计数器<目标){
++计数器;
}
if(计数器<极限){
//安排下一块
setTimeout(doAChunk,0);
}
否则{
//完成
显示(“完成,计数器=”+计数器);
}
}
}

在处理大量数据时保持用户界面响应的一种常见做法称为分块。您可以分割项目组,并使用setInterval或setTimeout来结束每个组上的循环。

如果您有太多的元素,担心浏览器可能挂起,那么您可能需要重新考虑您的设计。刚刚用完riosity,有多少元素正在使用?如果投票被否决,请添加评论。这将有助于改善情况。感谢John的帖子。实际上,这些数据是动态的,记录的数量可能会增加。因此,我想知道是否可能知道上限,或者这个值取决于哪些因素。如果你正在处理对于大量的数据,你应该看看webworker API。这不是所有浏览器都支持的,但是对于那些支持的浏览器,你可能可以卸载工作,这样客户端就不会受到太多的影响-你真的想避免接近极限,只要在达到极限之前,你的站点用户已经在想是什么了在地球上,这是错误的。当然,由于您没有从总体上充分描述场景,因此无法提供任何具体建议。感谢您的分享。但正如您所提到的——“您最好的选择是重构代码,这样您甚至可以避免开始接近极限。”-那么如何知道这个“限制”?通过执行测试?如果是,那么在不同的浏览器上,或者在不同配置的操作系统上?@NetEmp:让我们这样说:如果你有一块JavaScript在IE上花费了一两秒钟以上,你会想要重构它。现在,这不是一个完美的规则,因为实际上可以在IE上使用这个缓慢的脚本错误不到几秒钟,但这是一个很好的经验法则。是的,你总是需要在你的(主要)目标浏览器上测试你的代码,尤其是因为它们在很多方面都不同。感谢代码TJ,肯定增加了很多。将使用和测试它。