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

JS事件循环机制(event loop)之宏任务、微任务

js代码在执行的时候,会先执行同步代码,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中,当所有同步代码执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后,再将异步宏任务从队列中调入主线程执行,一直循环至所有的任务执行完毕(完成一次事件循环EventLoop)。

宏任务:整体代码script、setTimeout、setInterval、setImmediate、i/o操作(输入输出,比如读取文件操作、网络请求)、ui render(dom渲染,即更改代码重新渲染dom的过程)、异步ajax等

微任务:Promise(then、catch、finally)、async/await、process.nextTick、Object.observe(⽤来实时监测js中对象的变化)、 MutationObserver(监听DOM树的变化)

总结一下:

  • 宏任务按顺序执行,且浏览器在每个宏任务之间渲染页面
  • 所有微任务也按顺序执行,且在以下场景会立即执行所有微任务

    • 每个回调之后且js执行栈中为空。
    • 每个宏任务结束后。

相关文章:

  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-39-highlight() 方法之追踪定位
  • Redis 事务
  • LVGL圆弧、线条、图片、色环、按钮矩阵、文本区域、键盘部件
  • GeoScene产品学习视频收集
  • python系列教程224——导入只发生一次
  • 【python将字符串按‘/‘和‘\‘分割开】
  • 【DevOps】深入理解 Nginx Location 块:配置示例与应用场景详解
  • k8s node NotReady后会发生什么?
  • 【MySQL】表的增删查改
  • 探索最新潮流:AI配音技术的崛起
  • 7个常见的SQL慢查询问题及其解决方法
  • 【数据库基础】基本认识数据库--入门引导
  • 用Dockerfile和Shell脚本来部署一个Go项目
  • 15:00面试,15:08出来,面试问的有点变态。。。。
  • 《王者荣耀》4月狂揽2.34亿美元 单日流水1亿美元 全球销量第二
  • 新一代开源爬虫平台:SpiderFlow
  • conda activate 报错:conda: error: argument COMMAND: invalid choice: ‘ctivate‘解决
  • JDK、JRE、编译指令和垃圾回收机制详解
  • Linux 查询开机时间
  • ubuntu手动替换源后,更新源时提示“仓库.... jammy Release“ 没有Release文件
  • 向总书记汇报具身智能发展的“稚辉君”:从期待到兴奋再到备受鼓舞
  • 昂立教育:去年减亏1.39亿元,今年以“利润持续增长”为核心目标
  • 从咖啡节到话剧、演唱会,上海虹口“文旅商体展”联动促消费
  • 《沙尘暴》:用贴近生活的影像和表演拍摄悬疑剧
  • 十四届全国人大常委会第十五次会议在京举行,审议民营经济促进法草案等
  • “下山虎”张名扬一回合摘下“狮心”:你们再嘘一个给我听听