定时器合并

2020-05-28  本文已影响0人  贪恋冬天的幸福

按照常规理解,宏任务之间理应穿插渲染,而定时器任务就是一个典型的宏任务,看一下以下的代码:

setTimeout(() => {
  console.log("sto")
  requestAnimationFrame(() => console.log("rAF"))
})
setTimeout(() => {
  console.log("sto")
  requestAnimationFrame(() => console.log("rAF"))
})

queueMicrotask(() => console.log("mic"))
queueMicrotask(() => console.log("mic"))

从直觉上来看,顺序应该是:

mic
mic
sto
rAF
sto
rAF

在浏览器中尝试,得出以下顺序:

mic
mic
sto
sto
rAF
rAF

浏览器实际上合并了两个定时器任务,也就是说并不是每一个宏任务之后都紧跟着一次渲染。但是一定会伴随着微任务的执行,浏览器是否渲染的决定因素有很多。

上一篇下一篇

猜你喜欢

热点阅读