如何在 JavaScript 任务队列中排队(宏)任务?
How to queue a (macro)task in the JavaScript task queue?
在浏览器事件循环中使用JavaScriptqueue a task最直接直接的方法是什么?
不起作用的东西:
window.setImmediate(func)
: 非标准。
window.setTimeout(func, 0)
/window.setInterval(func, 0)
: Browsers throttle timers to ≥ 4ms.
new Promise(r => r()).then(func)
:排队的是微任务,而不是任务。
MessagePort.postMessage
就是这样做的。
onmessage = e => handleMessage;
postMessage("","*");
你甚至可以使用 MessageChannel 如果你想要一个较少干扰的意思:
const channel = new MessageChannel();
channel.port1.onmessage = handleMessage;
channel.port2.postMessage('');
这是目前唯一的 API 同步 排队任务 ,所有其他的都意味着至少一些 并行 执行。
也许有一天我们会有一个 scheduler.postTask
方法,它甚至可以让我们为我们的任务指定一些优先级,但这只是为了将来......
在浏览器事件循环中使用JavaScriptqueue a task最直接直接的方法是什么?
不起作用的东西:
window.setImmediate(func)
: 非标准。window.setTimeout(func, 0)
/window.setInterval(func, 0)
: Browsers throttle timers to ≥ 4ms.new Promise(r => r()).then(func)
:排队的是微任务,而不是任务。
MessagePort.postMessage
就是这样做的。
onmessage = e => handleMessage;
postMessage("","*");
你甚至可以使用 MessageChannel 如果你想要一个较少干扰的意思:
const channel = new MessageChannel();
channel.port1.onmessage = handleMessage;
channel.port2.postMessage('');
这是目前唯一的 API 同步 排队任务 ,所有其他的都意味着至少一些 并行 执行。
也许有一天我们会有一个 scheduler.postTask
方法,它甚至可以让我们为我们的任务指定一些优先级,但这只是为了将来......