Vue学习记录之十九 Event Loop,宏任务和微任务

一、代码的执行顺序

1)、同步任务

从上到下依次执行。

2)、异步任务

包含了 宏任务微任务

二、Event Loop 事件循环

Event Loop(事件循环)是一种编程模式,通常用于处理异步操作,特别是在 JavaScript 和 Node.js 等环境中。它允许程序在等待某些操作(如 I/O 操作、计时器、网络请求等)完成时,不会阻塞其他代码的执行,从而提高效率和性能。Event Loop 是一种强大的机制,特别适合处理高并发和异步操作的编程环境。
事件循环负责调度和执行宏任务微任务,它们各自代表不同优先级的任务类型。

在事件循环(Event Loop)中,任务分为两类:宏任务(Macro Task) 和 微任务(Micro Task)。这两类任务的执行顺序决定了异步操作的具体执行时机。

1、宏任务(Macro Task)

宏任务是相对较大的任务,每次事件循环迭代时从队列中取出一个宏任务进行执行,常见的宏任务包括(script(整体代码)、setTimeout、setInterval、UI交互事件、postMessage、Ajax):

  • setTimeout
  • setInterval
  • DOM 事件
  • HTTP 请求
  • I/O 操作(如文件操作)

2、微任务(Micro Task)

微任务是相对较小、较短的任务,通常在当前宏任务完成后立即执行。微任务的优先级高于宏任务,因此微任务会在本轮宏任务执行结束后立即执行,而不是等到下一个事件循环。常见的微任务包括(Promise.then catch finally、MutaionObserver、process.nextTick(Node.js 环境)):

  • Promise.then catch finally 的回调
  • MutationObserver(监听一个dom的变化)
  • queueMicrotask

在事件循环(Event Loop)中,当主线程空闲时,会从宏任务队列中选择一个任务进行执行。当一个宏任务执行完毕后,会检查是否有微任务队列,如果有,则将微任务队列中的所有任务依次执行完毕,然后再继续选择下一个宏任务执行。这样的过程循环进行,形成了事件循环。
总结来说,宏任务代表着较大粒度的任务,而微任务代表着较小粒度的任务。微任务通常在宏任务执行完毕后立即执行,因此微任务具有更高的优先级,可以在页面渲染前执行,从而提供更好的用户体验。

所有的同步任务都是在主进程执行的形成一个执行栈,主线程之外,还存在一个"任务队列",异步任务执行队列中先执行宏任务,然后清空当次宏任务中的所有微任务,然后进行下一个tick如此形成循环。

按顺序执行, 同步任务直接执行,异步任务进入异步队列,执行完以后,在进行入异步列队,然后在看是同步还是异步任务,如此循环执行。
在这里插入图片描述

三、实例演示

<template>
    <div>
        hello tailwindcss
    </div>
</template>
<script setup lang='ts'>
console.log(9)
async function Prom(){
     
      
      
    console.log('Y')
    await Promise.resolve()
    console.log('X')
}
setTimeout(()=>{
     
      
      
    console.log(1)
    Promise.resolve().then((

猜你喜欢

转载自blog.csdn.net/LvManBa/article/details/143137658