Javascript 如何监视for循环?

Javascript 如何监视for循环?,javascript,performance,for-loop,Javascript,Performance,For Loop,我希望每X毫秒监视一次for循环的内容: 下面是一个示例,我希望每0.1秒看到一次进度百分比: for (i = 0, max = 9007199254740992, timer = setInterval(function() {console.log(100*i/max);}, 100); i < max; i++) { // something } clearInterval(timer); for(i=0,max=9007199254740992,timer=setInter

我希望每X毫秒监视一次for循环的内容:

下面是一个示例,我希望每0.1秒看到一次进度百分比:

for (i = 0, max = 9007199254740992, timer = setInterval(function() {console.log(100*i/max);}, 100); i < max; i++) {
  // something
}
clearInterval(timer);
for(i=0,max=9007199254740992,timer=setInterval(function(){console.log(100*i/max);},100);i
但它不输出任何东西


我不想在循环中添加测试,以避免使用无用的计算时间。

由于Javascript的单线程特性,在
for
循环结束之前,无论执行多长时间,都不可能调用
setInterval()
回调

我建议采用另一种方法:每N次迭代记录运行时间

var res=[],
ts=性能。现在();
对于(变量i=0,max=1E6;i控制台日志(res)For循环将在100ms@RajaprabhuAravindasamy–我与for循环没有任何关系,但是
循环中的
初始化
setInterval
的回调函数将在
持续时间之后被调用,因为
clearInterval
显然在
100ms
之前被调用,
callback
从未被调用。@Rayon我的意思是,在调用回调队列中的第一个函数引用之前,for循环将被完成,setInterval也将被清除。因此,不会显示O/P。关于未调用它的原因,您是正确的,但OP说他们不想在循环中进行测试“以避免使用无用的计算时间”。也许在外部循环中使用嵌套循环和测试?或者网络工作者(看起来太复杂了)?@samgak你说得对。然而,任何措施都会改变结果。不过,我添加了另一种方法。通过使用位掩码,可以获得比模更便宜的方法:
mask=(1@Thomas关于位掩码优化,你是对的,但我认为第二种方法更好。关于第二个问题,我添加了一个
jMax
变量,以避免在每次迭代中计算上界(虽然JS引擎实际上可能会计算出i+10000在这个块中是一个常数,并自行优化)。谢谢!@Arnault
jMax=Math.min(iMax,i+10000)
或(/*…*/;j