事件循环

基础概念

主线程:js引擎执行的线程,执行初始化代码(页面渲染、函数处理等)

工作线程:也称幕后线程,这个线程可能存在于浏览器或js引擎内,与主线程是分开的,处理文件读取、网络请求等异步事件。

Event Loop(事件循环):同步任务会直接在主线程中进行执行,而异步任务由工作线程进行处理,然后放入任务队列(event queue)中。主线程中的任务全部完毕以后,再去读区任务队列中的任务(依照先进先出的规则),推入主线程中进行执行。

tick(指代码需要执行几遍)的步骤

每次事件循环操作称为tick,其步骤如下:

1.在此次 tick 中选择最先进入队列的任务( oldest task ),如果有则执行(一次)

2.检查是否存在 Microtasks(微任务) ,如果存在则不停地执行,直至清空Microtask Queue(微任务队列)

3.更新 render

4.主程序重复执行上述的步骤

宏任务和微任务

task分为

1.宏任务(Macro Task/Task)每个宏任务结束之后要清空所有的微任务。

script( 整体代码)、setTimeout、setInterval、I/O、UI 交互事件、setImmediate(Node.js 环境)

2.微任务(Micro Task)

Promise、MutaionObserver、process.nextTick(Node.js 环境)

posted @ 2022-03-03 13:10  BONiii  阅读(115)  评论(0编辑  收藏  举报