在浏览器事件循环中,使用使任务排队最直接和最直接的方式是什么?
不使用的东西:
window.setImmediate(func):不标准.window.setTimeout(func, 0)/window.setInterval(func, 0):浏览器将计时器节流到≥4ms。new Promise(r => r()).then(func):它排队的是一个微任务,而不是一个任务。发布于 2020-05-03 12:19:41
MessagePort.postMessage就是这么做的。
onmessage = e => handleMessage;
postMessage("","*");您甚至可以使用一个MessageChannel,如果您想要一个较少的干扰手段:
const channel = new MessageChannel();
channel.port1.onmessage = handleMessage;
channel.port2.postMessage('');这是目前唯一同步排队任务的API,所有其他API都意味着至少有一些任务在并行执行中。
也许有一天我们会有一个scheduler.postTask方法,它甚至允许我们为我们的任务指定一些优先级,但这只是为了将来.
https://stackoverflow.com/questions/61574088
复制相似问题