当前位置: 首页 > news >正文

微任务与宏任务

微任务(Microtask)和宏任务(Macrotask)是 JavaScript 事件循环(Event Loop)中的两个核心概念,用于描述异步任务的执行顺序和优先级。它们的区别主要体现在任务调度和执行时机的不同。

宏任务: JavaScript 引擎在事件循环的每个“循环周期”中处理的主要任务。

  • setTimeout 和 setInterval 的回调

  • DOM 事件(如点击、滚动)

  • I/O 操作:Input/Output 输入/输出操作,是计算机与外部设备或其他系统进行数据交互的过程。简单来说,它是程序读取数据(输入)或写入数据(输出)的行为

    • 文件操作:读取本地文件、写入文件。

    • 网络请求:向服务器发送 HTTP 请求(如 fetchXMLHttpRequest)。

    • 用户交互:监听键盘输入、鼠标点击。

    • 数据库操作:查询或修改数据库中的数据。

    • 设备通信:与摄像头、打印机等硬件设备交互。

  • requestAnimationFrame(浏览器)

  • 主线程的同步代码(整体 script 代码本身也是一个宏任务)

  • 执行顺序:
    每个事件循环中,宏任务队列中的任务会依次执行,每次只执行一个宏任务,执行完成后会检查微任务队列。

 微任务:在当前宏任务执行完成后、下一个宏任务开始前立即执行的任务,优先级高于宏任务。

  • Promise.then()Promise.catch()Promise.finally() 的回调

  • MutationObserver(监听 DOM 变化)

  • queueMicrotask() 函数

  • Node.js 中的 process.nextTick(优先级最高,但仅在 Node.js 环境)

  • 微任务的设计是为了让某些高优先级的异步操作(如 Promise 回调)能尽快执行,避免被宏任务(如 UI 渲染、I/O)阻塞,从而提升性能和响应速度。

  • 执行顺序:
    每执行完一个宏任务后,会清空整个微任务队列(包括微任务执行过程中新产生的微任务),然后再执行下一个宏任务。

事件循环的执行流程

  1. 执行一个宏任务(如 script 主代码)。

  2. 执行过程中遇到微任务,将其加入微任务队列;遇到宏任务,加入宏任务队列。

  3. 当前宏任务执行完毕后,立即依次执行所有微任务(直到微任务队列为空)。

  4. 浏览器可能进行 UI 渲染。

  5. 从宏任务队列中取出下一个宏任务,重复上述流程。

http://www.xdnf.cn/news/97651.html

相关文章:

  • Linux命令-tcpdump
  • On the Biology of a Large Language Model——Claude团队的模型理解文章【论文阅读笔记】其一CLT与LLM知识推理
  • Android APP 爬虫操作
  • 集结号海螺捕鱼游戏源码解析(第三篇):拉霸机模块开发详解与服务器开奖机制
  • 【爬虫工具】2025微博采集软件,根据搜索关键词批量爬帖子,突破50页限制!
  • 2025职业本科网络安全课程体系设计:如何培养行业急需的实战型人才?
  • VulnHub-DarkHole_2靶机渗透教程
  • 高并发下单库存扣减异常?飞算 JavaAI 自动化生成分布式事务解决方案
  • iOS18 MSSBrowse闪退
  • 【PCB工艺】推挽电路及交越失真
  • 关于大数据的基础知识(四)——大数据的意义与趋势
  • 计算机网络 第二章:应用层(四)
  • redis组件在PAAS平台运维总结
  • Jmeter中同步定时器使用注意点
  • RPC通信原理实战
  • 香港服务器租用需要哪些性能要求
  • 全球密封淬火炉市场:技术迭代与区域竞争格局深度剖析
  • 配置Spark历史服务器,轻松查看任务记录
  • Ubuntu18.04 升级最新版本Cmake
  • 氢气传感器在燃料电池中的应用解析
  • Spark与Hadoop之间的联系与区别
  • 使用Python将YOLO的XML标注文件转换为TXT文件格式
  • 面向高可靠场景的RISC-V低功耗MCU硬件安全设计
  • 服务器如何修复SSL证书错误?
  • 重塑智慧出行新生态,德赛西威全新战略愿景发布
  • 使用 VSCode 编写 Markdown 文件
  • onlyoffice历史版本功能实现,版本恢复功能,编辑器功能实现 springboot+vue2
  • Flutter 环境搭建
  • Milvus(4):创建 Collections
  • Axure按钮设计分享:打造高效交互体验的六大按钮类型