作家
登录

JavaScript Event Loop机制详解与Vue.js中nextTick的实践应用

作者: 来源: 2017-09-12 10:24:34 阅读 我要评论

  •   
  •  
  • console.log('main2'); 
  •  
  •   
  •  
  • // 履行结不雅 
  •  
  • main1 
  •  
  • promise 
  •  
  • main2 
  •  
  • process.nextTick1 
  •  
  • promise then 
  •  
  • setTimeout 
  •  
  • process.nextTick2  
  • 我们在前文中已经介绍过 JavaScript 的主线程在碰到异步调用时,这些异步调用会急速返回某个值,大年夜而让主线程不会在此处壅塞。而真正的异步操作会由浏览器履行,主线程则会在清空当前调用栈后,按照祖先先出的次序攫取义务队列琅绫擎的义务。而 JavaScript 中的义务又分为 MacroTask 与 MicroTask 两种,在 ES2015 中 MacroTask 即指 Task,而 MicroTask 则是指代 Job。典范的 MacroTask 包含了 setTimeout, setInterval, setImmediate, requestAnimationFrame, I/O, UI rendering 等,MicroTask 包含了 process.nextTick, Promises, Object.observe, MutationObserver 等。 二者的关系可以图示如下:

    参考 whatwg 规范 中的描述:一个事宜轮回(Event Loop)会有一个或多个义务队列(Task Queue,又称 Task Source),这里的 Task Queue 就是 MacroTask Queue,而 Event Loop 仅有一个 MicroTask Queue。每个 Task Queue 都包管本身按照回调入队的次序依次履行,所以浏览器可以大年夜内部到JS/DOM,包管动作按序产生。而在 Task 的履行之间则会清空已有的 MicroTask 队列,在 MacroTask 或者 MicroTask 中产生的 MicroTask 同样会被压入到 MicroTask 队列中并履行。参考如下代码:

    1. function foo() { 
    2.  
    3.   console.log("Start of queue"); 
    4.  
    5.   bar(); 
    6.  
    7.   setTimeout(function() { 
    8.  
    9.     console.log("Middle of queue"); 
    10.  
    11.   }, 0); 
    12.  
    13.   Promise.resolve().then(function() { 
    14.  
    15.     console.log("Promise resolved"); 
    16.  
    17.     Promise.resolve().then(function() { 
    18.  
    19.       console.log("Promise resolved again"); 
    20.  
    21.     }); 
    22.  
    23.   }); 
    24.  
    25.   console.log("End of queue"); 
    26.  
    27.  
    28.   
    29.  
    30. function bar() { 
    31.  
    32.   setTimeout(function() { 
    33.  
    34.     console.log("Start of next queue"); 
    35.  
    36.   }, 0); 
    37.  
    38.   setTimeout(function

        推荐阅读

        借力大数据技术 证券行业迎转型契机

      51CTO诚邀您9月23号和秒拍/国美/美团元专家一路聊智能CDN的优化之路,抓紧时光哦! 互联网+时代,证券行业制订大年夜数据计谋急切而合时。一方面,近年来大年夜数据被晋升到国度成长计谋层>>>详细阅读


      本文标题:JavaScript Event Loop机制详解与Vue.js中nextTick的实践应用

      地址:http://www.17bianji.com/lsqh/37333.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)