美文网首页
定时器合并

定时器合并

作者: 贪恋冬天的幸福 | 来源:发表于2020-05-28 11:21 被阅读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
    

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

    相关文章

      网友评论

          本文标题:定时器合并

          本文链接:https://www.haomeiwen.com/subject/igpoahtx.html