在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 為什么setTimeout永遠(yuǎn)比setImmediate早?

為什么setTimeout永遠(yuǎn)比setImmediate早?

setImmediate(function A() {
    console.log('2')
})
setTimeout(function B() {
    console.log('1')
}, 0)

從網(wǎng)上的文章來(lái)看,理論上應(yīng)該是setImmediate更快(放到task隊(duì)列的前面),然而實(shí)際并不是如此。(Node 9.x)

回答
編輯回答
離殤

做了一下實(shí)驗(yàn),用node多運(yùn)行幾次,發(fā)現(xiàn)執(zhí)行順序誰(shuí)先誰(shuí)后都是不一定的,但是大多數(shù)情況,setTimeout更快。

var recordA = {};
var recordB = {};
var MAX = 100;

function output(index) {
  if (index === MAX) {
    console.log('setImmediate:' + Object.keys(recordA).length);
    console.log('setTimeout:  ' + Object.keys(recordB).length);
  }
}

for (var i = 0; i <= MAX; ++i) {
  (function (_i) {
    setImmediate(function A() {
      if (!recordB.hasOwnProperty(_i)) {
        recordA[_i] = 'done';
        output(_i);
      }
    });

    setTimeout(function B() {
      if (!recordA.hasOwnProperty(_i)) {
        recordB[_i] = 'done';
        output(_i);
      }
    }, 0);
  })(i);
}

node版本9.2.0

然后這個(gè)setImmediate目前在瀏覽器里只有IE自?shī)首詷?lè)。

2017年10月3日 20:31