Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 哪种方式循环最快?[出于好奇]_Javascript_Jquery_Loops_Ecmascript 5 - Fatal编程技术网

Javascript 哪种方式循环最快?[出于好奇]

Javascript 哪种方式循环最快?[出于好奇],javascript,jquery,loops,ecmascript-5,Javascript,Jquery,Loops,Ecmascript 5,我试图以最快的方式将变量从0增加到1000000。在这种情况下,我需要增加变量值并测量运行所有这些循环的时间。我应该使用while循环,还是时间间隔为0的setInterval最快 var i = 0; while(i <= 1000000){ i++; } //VS var i = 0; setInterval(function(){ if(i <= 1000000){ i++ } },0) //OTHER OPTIONS //... 如何衡量这一点 更

我试图以最快的方式将变量从0增加到1000000。在这种情况下,我需要增加变量值并测量运行所有这些循环的时间。我应该使用while循环,还是时间间隔为0的setInterval最快

var i = 0;
while(i <= 1000000){
  i++;
}

//VS

var i = 0;
setInterval(function(){
  if(i <= 1000000){
    i++
  }
},0)

//OTHER OPTIONS
//...
如何衡量这一点

更新


我想我表达错了,我想通过一个接一个地添加到变量中,实际达到100万。这就是我衡量这一点的问题,哪种方法是最好的方法?

如果我正确地阅读了你的问题,你想用最快的方法计时,以形成某种循环

JavaScript中有许多循环构造,包括:

对于 虽然 做虽然 递归 设置超时/设置间隔 为了……在 为了……的 发电机 其中,基本for循环通常是最快的,因为它的开销比其他任何循环都要小

setTimeout和setInterval将是较慢的,因为不遵守0延迟。浏览器确实设置了一些内部最小延迟


我从未使用过它,但我相信有一种postMessage可以毫不延迟地使用。

我怀疑这两种方法都不是最快的方法,但您必须了解,随着实现的不同,浏览器之间会有差异

setInterval肯定是最慢的,因为JavaScript在单线程环境中运行。即使延迟为0,您所做的只是在引擎空闲时将回调函数排队等待一段时间,直到循环完成

最快的方法很可能是循环的标准:

 var startTime = new Date();
 for(var i = 0; i < 1000000; ++i){

      // Each iteration of the loop will make i
      // have a different value inside the loop

 }
 var diff = Math.abs(new Date() - startTime);

 console.log(diff);

此jsPerf将比较到while和wins

要测量时间,需要使用JavaScript的对象


setInterval就像一个睡眠计时器。使用0ms的唯一好处是将进程推到后台。它将同步阻塞过程转变为异步阻塞过程。然后,setInterval块下面的其余代码可以继续执行&setInterval块中的代码将开始在后台执行。这是一个相当漂亮的把戏,我已经用了很多次了。。。但是它根本不会加快循环速度。

执行测试时,我发现for循环是这种情况下更好的选择:

for(var i = 0; i < 1000000; ++i){

      // Each iteration of the loop will make i
      // have a different value inside the loop

 }

为了测量我使用console.time和console.timeEnd的时间,最快的方法是增加1000000。为什么?这是某种瓶颈吗?我认为你的第二种方法会使浏览器崩溃。我不推荐使用setInterval方法,但如果你使用它,请确保在完成后清除间隔。当前代码将永远运行该间隔。已经为此设置了几个JSPerf:并且是很好的示例。您忘记了jQuery:PI无法想到特定于jQuery的循环技术。jQuery永远不会比标准JavaScript快,因为它只是返回JavaScript的包装器API。
for(var i = 0; i < 1000000; ++i){

      // Each iteration of the loop will make i
      // have a different value inside the loop

 }