浏览器Event Loop

81 阅读1分钟

Event Loop即事件循环,是浏览器解决javaScript单线程运行时不会阻塞的一种机制,也是异步的原理所在。

知识铺垫

Javascript代码运行时,被分为两种任务。分别是宏任务微任务Event Loop在处理上述两种任务时,会分别用到Task QueueMicroTask Queue宏任务微任务进行管理,作为队列具有先进先出的特性。

宏任务 (MacroTask/Task)

包含以下几种:

  1. script操作
  2. dom操作
  3. 用户交互操作
  4. 网络请求
  5. 定时器相关setTimeoutsetInterval

微任务(MircoTask)

包含以下几种:

  1. Promise中的thencatchfinally
  2. window中的MutationObserver(用于监听DOM树的改变)
  3. Process.nextTickNode中的方法)

Event Loop循环步骤演示

Javascript Runtime提供对象机制,使其能够与外界交互,是Javascript的执行环境。

运行机制如下:

  1. 主线程自上而下执行所有代码
  2. 同步任务进入主线程被执行
  3. 异步任务进入Event Table,当异步任务执行到有结果的时候,进入Event Queue
  4. 当前主线程宏任务执行完毕后,从Event Queue中读取任务,放入主线程
  5. 重复上述步骤,直至Task Queue中所有任务执行完毕...

上述步骤就是Event Loop的整个执行步骤。