说到JavaScript的事件循环(Even loop)就会提到同步事件和异步事件
整个JS在运行过程中主要执行以下事件循环
- 主程序从上往下执行同步任务
- 异步任务会被放入异步任务队列中
- 当同步任务执行完成后,会去异步任务队列中执行异步事件
上面就是一个简单的事件循环过程,那么在异步任务中还有宏任务和微任务的区别,他们具体的定义如下
微任务
微任务是异步任务中最早开始执行的,它可以是同步任务、宏任务执行时产生的,微任务能够在实时性和效率之间做一个有效的权衡,一般可以总结为一下几个方法
process.nextTick (node)
Promise
Async/Await
Object.observe
MutationObserver
这里Promise
、Async/Await
、Object.observe
以及MutationObserver
,都是JS语法内置的方法, 不需要浏览器支持,可以理解为直接用JS引擎就能处理掉的任务
宏任务
可以理解为每一个宏任务进程中都包含了一个微任务进程,事件的触发、非JS部分以及定时器都可以归为宏任务
script(代码块)
setTimeout / setInterval 定时器
setImmediate 定时器
I/O
UI render
宏任务会触发新一轮的事件循环,下图就是宏微任务的执行流程图,
https://juejin.cn/post/6932263539839074311?utm_source=gold_browser_extension#heading-2
https://www.jianshu.com/p/75107522813f
https://www.jianshu.com/p/bfc3e319a96b
https://juejin.cn/post/6880787856353132552
https://www.cnblogs.com/fangdongdemao/p/10262209.html