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

软件开发与网站建设seo线下培训机构

软件开发与网站建设,seo线下培训机构,网站建设案例单招网,网页制作与网站建设报告在 JavaScript 中,宏任务(MacroTask) 和 微任务(MicroTask) 是事件循环中任务调度的核心分类。 一、概述:事件环工作执行流程 第一步:执行同步代码 从调用栈中执行当前所有同步任务&#xff0…

在 JavaScript 中,宏任务MacroTask) 和 微任务MicroTask) 是事件循环中任务调度的核心分类。

一、概述:事件环工作执行流程

第一步:执行同步代码
从调用栈中执行当前所有同步任务,直到调用栈清空。

第二步:清空微任务队列
依次执行微任务队列中的所有任务(包括执行过程中新产生的微任务),直到队列为空。

第三步:渲染更新(浏览器)
如果需要,浏览器会执行页面渲染(重绘、布局等)。

第四步:执行一个宏任务
从宏任务队列中取出队列头的第一个任务(如 setTimeout 回调),执行它。

第五步:重复循环
回到第一步,开启新的事件循环。

二、宏任务(MacroTask

宏任务代表需要较长时间执行的异步任务,每次事件循环中只执行一个宏任务(队列中的首个):

常见的宏任务:
setTimeout: 定时器回调函数(即使延迟为 0,也是宏任务)。
setInterval: 周期性定时器回调。
I/O 操作: 文件读写、网络请求(如 XMLHttpRequest、fetch 的回调)。
DOM 事件: 用户交互事件(如点击、滚动等)的回调。
requestAnimationFrame: 浏览器动画帧回调(通常归类为宏任务,但执行时机与渲染相关)。
script: 整体代码 初始执行的全局同步代码本身也是一个宏任务。
MessageChannel: 跨文档通信或 Web Worker 通信的回调。
Node.js 特有:
setImmediate: Node.js 中立即执行的宏任务(与 setTimeout(fn, 0) 类似,但有差异)。
I/O 回调 Node.js 中文件、网络等异步操作的回调

二、微任务(MicroTask

微任务具有更高优先级,会在当前宏任务执行后下一个宏任务执行前一次性清空队列

常见的微任务:
Promise.then/catch/finally : Promise 的异步回调(包括 async/await 的隐式转换)。
MutationObserver: 监听 DOM 变化的回调(浏览器环境)。
queueMicrotask: 显式将函数加入微任务队列的 API(如 queueMicrotask(() => { … }))。
Node.js 特有
process.nextTick Node.js 中优先级最高的微任务(甚至高于 Promise)

三、关键区别

请添加图片描述

四、执行顺序案例

1:基础顺序
console.log("Start"); // 同步代码(宏任务)// 宏任务
setTimeout(() => console.log("Timeout"));// 微任务
Promise.resolve().then(() => console.log("Promise"));console.log("End"); // 同步代码(宏任务)
// 输出:Start → End → Promise → Timeout
2:微任务嵌套
// 宏任务
setTimeout(() => console.log("Timeout"));// 微任务(嵌套微任务)
Promise.resolve().then(() => {console.log("Promise 1");Promise.resolve().then(() => console.log("Nested Promise"));}).then(() => console.log("Promise 2"));
// 输出:Promise 1 → Nested Promise → Promise 2 → Timeout

五、特殊注意事项

Node.js 与浏览器的差异
Node.js 中 process.nextTick优先级高于 Promise.then。
Node.js 的 setImmediate 和 setTimeout(fn, 0) 执行顺序可能不同

微任务可能阻塞渲染
如果微任务队列过长,浏览器会在执行完所有微任务后才进行渲染,导致页面卡顿

避免微任务无限递归

function infiniteMicrotask() {Promise.resolve().then(infiniteMicrotask);
}
infiniteMicrotask(); // 会导致页面卡死

六、总结

宏任务:用于处理需要延迟执行或与外部交互的任务(如定时器、I/O)。

微任务:用于处理需要立即执行的高优先级任务(如 Promise 回调)。

以上内容如有错误之处,欢迎批评指正

http://www.dtcms.com/wzjs/274659.html

相关文章:

  • 网站开发题目软文营销写作技巧有哪些?
  • 子目录创建网站石家庄最新消息今天
  • 适合小县城开的加盟店seo网站排名后退
  • 建一个类似淘宝的网站需要多少钱简易网站制作
  • 网站创建流程最近的头条新闻
  • 山西建设厅八大员查询网站推广普通话手抄报简单又好看内容
  • 专业的聊城做网站费用腾讯推广一次广告多少钱
  • 网站的建设流程图张掖seo
  • wordpress给用户自动注册东莞优化seo
  • 所有搜索引擎蜘蛛不来网站了百度广告优化
  • 做5g网站空间容量要多少钱今日特大军事新闻
  • dede手机网站搜狗站长推送工具
  • 开发网站合作协议seo型网站
  • 好点的开发网站的公司视频号推广
  • 企业网站建设排名开发网站建设公司
  • 网站联系我们 怎么做地图怎么上百度搜索
  • 网站后台不显示文章内容厦门seo培训学校
  • 杭州做网站五广告营销顾问
  • 北大青鸟的网站建设课程多少钱免费永久个人域名注册
  • 寻找郑州网站建设公司百度网站提交了多久收录
  • 平板电脑网站模板东莞百度推广排名
  • 做的网站没有注册谷歌搜索引擎营销
  • 最专业的网站开发公司哪家最专业东营seo
  • 网站建设带服务器b站引流推广网站
  • 产权交易中心网站建设的原因中国最厉害的营销策划公司
  • 网站更换域名 seo聊城网站开发
  • 外贸精品网站建设关键词优化公司费用多少
  • 怎么建php网站公司网站建站要多少钱
  • 泉州网站建设测试如何发布自己的html网站
  • 天津seo方案安卓优化大师官网