理解js中的eventloop和task

 一直以来对event loop有点模糊,看了好多大牛的文章,特写此文加强记忆。

首先需要明确的一点儿是ECMAScript中没有event loop,event loop是在HTML Standard定义的。event loop规范中定义了浏览器何时进行渲染更新,探索event loop的原理可以帮助我们更好了解一些框架模板渲染的机制,同时也可以考虑一下如何coding能最大程度的提升性能。


event loop : 事件循环,是实现异步的一种方式,在html standard 中的定义是event loop协调事件,用户交互,脚本,渲染,网络等
task: 任务, 一个事件循环有一个或者多个task队列。task可以分为两类:Macro Task (宏观)和 Micro Task(微观), 并且每个 Macro Task 结束后, 都要清空所有的 Micro Task。


html standard 没有具体指明哪些是Micro Task任务源,通常认为是microtask任务源有:process.nextTick 、promise 、Object.observe(已废弃)、MutationObserver(html5新特性)。Macrotask 包括:script(整体代码),setTimeout, setInterval, setImmediate, I/O, UI rendering
引用此文中解释如下:

eventloop.jpg

下面以一个例子说明下整个过程:

setImmediate(function(){
    console.log(1);
},0);
setTimeout(function(){
    console.log(2);
},0);
new Promise(function(resolve){
    console.log(3);
    resolve();
    console.log(4);
}).then(function(){
    console.log(5);
});
console.log(6);
process.nextTick(function(){
    console.log(7);
});
console.log(8);

个人理解过程如下(不对之处,望指正):


eventloop1.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 刚开始使用JS异步的时候,有这样的疑问:JS不是单线程的吗?为什么会有异步机制?但是如果没有异步机制,定时器又是怎...
    盛夏晚清风阅读 5,599评论 0 11
  • 事件循环(evenloop) 事件循环机制是宿主环境提供的。js中处理异步,增加了任务队列的概念(你不知道的js中...
    209bd3bc6844阅读 7,956评论 0 1
  • event loop 浏览器内核是多线程,Javascript是单线程。 楼主之前讲解了js的异步处理,只是讲解了...
    sunny519111阅读 11,961评论 4 20
  • 接下来,我将和大家刀刀我与思维导图的那些事儿,如果你以为这是一篇纯总结,我只能说,呵呵 01缘起 我是一名美妆行业...
    成长路上的幸运儿阅读 9,362评论 0 2
  • 只是面对。全文请点击:http://www.jianshu.com/p/20695efcd921 晚安~
    Gigi熊阅读 1,634评论 0 1

友情链接更多精彩内容