当前位置: 首页 > 面试题库 >

事件循环上下文中微任务和宏任务之间的区别

莫欣悦
2023-03-14
问题内容

我刚读完Promises / A+规范,偶然发现了术语microtask和macrotask:

我以前从未听说过这些术语,现在我很好奇可能会有什么不同?

鉴于此WHATWG规范,我知道理论上我应该能够自己提取差异。但是我确信,专家的简短解释也可以使其他人受益。


问题答案:

事件循环的 一种解决 方法是从 宏任务队列中 恰好 处理 一个
任务在WHATWG规范中,该队列简称为 任务队列 )。此宏任务完成后,将处理所有可用的
任务,即在相同的复现周期内。在处理这些微任务时,它们可以将更多的微任务排队,这些任务将一一运行,直到用完微任务队列。

这有什么实际后果?

如果 微任务 递归地排队其他微任务,则可能需要很长时间才能处理下一个宏任务。这意味着,您最终可能会遇到UI阻塞或应用程序中某些I / O空闲的情况。

然而,至少有关的Node.js的process.nextTick函数(队列 microtasks
),存在通过process.maxTickDepth的手段对这种阻挡一个内置的保护。此值的默认设置为1000,在达到此限制后将减少对
任务的 进一步处理,从而允许处理下一个 宏任务

那么什么时候使用什么呢?

基本上,当您需要以同步方式异步执行 事务 时(例如,您说要 在最近期执行此(微)任务),请使用微任务 。否则,请坚持 宏任务



 类似资料:
  • 我刚刚读完Promises/A规范,偶然发现了术语microtask和macrotask:参见http://promisesaplus.com/#notes 我以前从未听说过这些术语,现在我很好奇会有什么区别? 我已经试图在网上找到一些信息,但我找到的只是w3.org档案馆的这篇文章(这篇文章没有向我解释其中的区别):http://lists.w3.org/Archives/Public/publ

  • 浏览器中 JavaScript 的执行流程和 Node.js 中的流程都是基于 事件循环 的。 理解事件循环的工作方式对于代码优化很重要,有时对于正确的架构也很重要。 在本章中,我们首先介绍事件循环工作方式的理论细节,然后介绍该知识的实际应用。 事件循环 事件循环 的概念非常简单。它是一个在 JavaScript 引擎等待任务,执行任务和进入休眠状态等待更多任务这几个状态之间转换的无限循环。 引擎

  • 本文向大家介绍微任务和宏任务有什么区别?相关面试题,主要包含被问及微任务和宏任务有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 宏任务:script整体代码、setTimeout、setInterval... 微任务:Promise.then、Object.observe、process.nextTick... 运行机制:当前宏任务执行结束 -> 是否有微任务 --> 执行当前微任务 --

  • 我花了5个多小时试图解决这个问题。有什么问题吗? 我补充道: 组织。格拉德尔。configureondemand=true 但问题依然存在 建筑gradle(模块:应用程序) 建造。gradle(项目:myproject) //顶级构建文件,您可以在其中添加所有子项目/模块通用的配置选项。

  • 我有一个JavaExec任务,它运行一个Java类来生成文件。源代码生成器需要搜索CLASSPATH来找到它用来确定要生成什么的某些类。它需要当前项目的类在CLASSPATH中。 我有这个任务: 当我运行此任务时,我得到“以下任务之间的循环依赖关系:”。很明显,我指的是类路径本身。 如果使用此任务,则项目类不在类路径中: 在这个问题上,我已经兜了几个小时的圈子,真的需要一些帮助。 提前谢谢!

  • 之所以想到这个问题,是因为在看一篇介绍事件循环的文章的一个例子 执行结果是 关于事件循环、宏任务、微任务我已经比较了解。但是这些内容和事件冒泡、捕获的传递结合起来,之前没有考虑过。 文章开头介绍宏任务包括“UI交互事件”,所以点击事件是宏任务 但从执行结果来看,事件冒泡是属于微任务。当然,一个是事件的点击,一个是事件的传递,性质不同。不知道官方标准是怎么定义这部分内容的?另外,和这个有关的标准,是