转载:https://dbaron.org/log/20100309-faster-timeouts(by David Baron)
// 实现一个比setTimeout(0)更短延迟的函数
(function () {
let timeouts = []
const messageName = `zero-timeout-message`
function setZeroTimeout(fn) {
timeouts.push(fn)
window.postMessage(messageName, `*`)
}
function handleMessage(event) {
if(event.source == window && event.data == messageName) {
event.stopPropagation()
if(timeouts.length > 0) {
const fn = timeouts.shift()
fn()
}
}
}
window.addEventListener(`message`, handleMessage, true)
window.setZeroTimeout = setZeroTimeout
})()