知道我表述有问题,大神别喷,请看下面。我的问题是为什么setInterval面临阻塞情况用时更少。 昨晚用while轮询一个异步过程导致内存炸掉,换了setInterval之后正常。于是有了疑问,开始钻牛角尖 = =。 setInterval是非阻塞的,下面进行的是阻塞操作。 var timer = new Timeout(after); callback.call(timer,arguments[]); //不断绑定timeout,按照参数绑定和触发 C++双向链表。当检测超时会从列表移除 这貌似只能解释内存不炸掉的问题。。。 var c=0; while(c<100){ c++; var i=0; while(i<=100000000){ i++; if(i==1){ console.time(‘while’); } }
console.timeEnd(‘while’); } while: 1871.268ms while: 1805.696ms while: 1859.965ms while: 1465.144ms while: 1936.749ms while: 1845.596ms while: 1831.845ms while: 1867.280ms //同样阻塞的情况下调用setInterval setInterval(c,0)
function c() { var i=0; while(i<=1000000000){ if(i==1){ console.time(‘this’); } i++; } console.timeEnd(‘this’); } /* setInterval: 768.361ms setInterval: 699.622ms setInterval: 549.766ms setInterval: 722.351ms setInterval: 722.168ms setInterval: 489.062ms */