EventLoop事件循环机制
指浏览器或node中一种解决JavaScript单线程运行时不会阻塞的一种机制,即使用异步的原理
javascript中有一个main thread主线程和call-stack调用栈;所有的任务都会被放到调用栈等待主线程执行
浏览器运行JavaScript的环境是单线程的,同时只能做一件事情;浏览器本身是多进程、多线程的。
1. js运行是单线程的
2.引入事件队列机制,防止阻塞影响性能
3.如果单线程的代码执行过程中遇到异步场景,会放入事件队列,而后继续执行后续代码
4.常见的异步场景
a. 定时函数(满足延时时间)
b.事件函数(特定事件触发)
c.Ajax回调函数(服务器返回数据时触发)
5.进入队列的任务执行时机
a.主线程必须空闲
b.队列中任务需要满足特定的触发条件
6.宏任务、微任务
a.宏任务:进入浏览器事件队列的任务
b.微任务:不仅如此浏览器事件队列,但进入微任务队列的任务
7.常见的宏任务、微任务
a.宏任务(task):script(整体代码)、setTimeout、setInterval、serImmediate、I/O、ui
rendering
b.微任务(jobs):process.nextTick(node中)、Promise.then(非 new Promise)、MutationObserve(html5新特性)
8.微任务执行时机:主线程完成运行之后,当前宏任务结束之前
9.微任务进入队列时机(resolve触发时)
9.代码执行优先级:主线程=>微任务=>宏任务