首页 > 其他分享 >现在有一个宏任务,又有一个微任务两者同一层级,在微任务里面又有一个宏任务和一个微任务,请问执行顺序是什么,为什么?

现在有一个宏任务,又有一个微任务两者同一层级,在微任务里面又有一个宏任务和一个微任务,请问执行顺序是什么,为什么?

时间:2024-12-12 09:21:26浏览次数:3  
标签:macrotask 层级 一个 Microtask Macrotask queue 任务 event loop

Let's break down the execution order in this JavaScript scenario. You're describing a situation involving the event loop, macrotasks, and microtasks.

Here's the setup:

  • Macrotask 1 (Outer)
  • Microtask 1
    • Macrotask 2 (Inner)
    • Microtask 2

Here's the execution order:

  1. Macrotask 1 (Outer): Executes completely.

  2. Microtask 1: Executes.

  3. Microtask 2: Executes. Microtasks are processed in FIFO (First-In, First-Out) order, and all pending microtasks are executed before the next macrotask. This is why Microtask 2 runs before Macrotask 2.

  4. Macrotask 2 (Inner): Executes. Even though this macrotask was queued within a microtask, it doesn't execute until the current event loop tick is complete (meaning all pending microtasks are finished).

Why this order?

JavaScript's event loop prioritizes microtasks over macrotasks within a single tick. The goal is to ensure that tasks related to the current operation (often UI updates or promise resolutions) are handled promptly. Here's a more detailed explanation:

  • Event Loop Ticks: The JavaScript engine processes tasks in a series of "ticks." Each tick generally corresponds to handling one macrotask.

  • Macrotask Queue: Macrotasks (like setTimeout, setInterval, user interactions, network events, etc.) are placed in a queue. The event loop picks one macrotask from this queue and executes it.

  • Microtask Queue: Microtasks (like promises' .then() callbacks, queueMicrotask, MutationObserver callbacks) are also placed in a queue. However, after a macrotask completes, the event loop checks the microtask queue.

  • Microtask Priority: The event loop processes all pending microtasks before moving on to the next macrotask. This ensures that things like UI updates triggered by promises happen as soon as possible, making the application feel more responsive.

In your example, even though Macrotask 2 was queued during the execution of Microtask 1, it has to wait its turn in the macrotask queue. The event loop won't start the next macrotask until the microtask queue is empty. This is crucial for predictable and responsive web applications.

标签:macrotask,层级,一个,Microtask,Macrotask,queue,任务,event,loop
From: https://www.cnblogs.com/ai888/p/18601450

相关文章

  • 你开发出的一个页面,在服务器下运行,请算下它的并发量(服务器配置自己假设)
    Let'sanalyzethepotentialconcurrencyofawebpagerunningonahypotheticalserver.Sinceyouhaven'tspecifiedthespecificsofthewebpage(e.g.,howresource-intensiveitis)ortheserverhardware,I'llmakesomereasonableassumpti......
  • 计算从一个大数组中(如1万条数据)取出第一数据和最后一条数据的时间分别是多少?
    在JavaScript前端开发中,从一个包含1万条数据的数组中获取第一条和最后一条数据的时间复杂度非常低,通常可以认为是常数时间O(1)。这与数组的大小几乎无关。原因是JavaScript数组是基于索引的,访问特定索引的元素可以直接通过索引进行,无需遍历或搜索。以下是一些说明:获......
  • 写一个方法将UTC时间和北京时间换算
    /***UTC时间和北京时间互相转换*@param{Date|string}time-需要转换的时间,可以是Date对象或时间字符串*@param{string}from-原始时区,'utc'或'beijing'*@param{string}to-目标时区,'utc'或'beijing'*@returns{Date}转换后的时间,如果输入无效则返......
  • 在CodeBolcks+wxWidgets+wxSmith下的C++编程教程——用向导创建一个wxWidgets项目(sTet
    0.前言我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”:学习编程......
  • 【Java编程】如何自定义一个类加载器,加载自己指定的类?
    在Java中,类加载器(ClassLoader)负责把字节码文件(.class文件)加载到JVM中,Java的类加载机制给我们提供了高度的灵活性。通常情况下,Java会用默认的类加载器去加载类,但如果想加载特定路径的类,或者加载特定格式的文件,就需要自己写一个类加载器。本文将带你一步步实现一个简单的自......
  • 二分查找第一个出现target的位置(不断左偏移)
    includeincludeusingnamespacestd;intbinarySearchFirstOccurrence(vector&nums,inttarget){intleft=0;intright=nums.size()-1;intresult=-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]==target){r......
  • Python随机抽取Excel数据并在处理后整合为一个文件
      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件,随机从其中选取一部分数据,并将全部文件中随机获取的数据合并为一个新的Excel表格文件的方法。  首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel表格文件(在本文中我们就......
  • 【2024年华为秋招-12月11日-第二题(200分)- 服务器训练任务调度】(题目+思路+Java&C++&Py
    题目内容团队申请了一组服务器,用于机器学习训练,为了充分利用资源,需要你来完成任务调度算法的实现。一台服务器同一时间只能执行一个训练任务,每个训练任务有训练时间和优先级。当空闲服务器不足时,优先执行高优先级的训练任务;如果多个训练任务的优先级相同,优先执行训练时......
  • 异步任务与定时任务:提升Web应用性能的利器
    引言在现代Web开发中,用户体验的重要性越来越显著。为了优化网站性能,处理长时间运行的任务变得不可或缺。通过异步任务和定时任务,我们可以将耗时的操作放到后台进行执行,从而提升前端响应速度与用户体验。依据“网站优化的第二定律”,合理使用异步和定时任务能够显著减少用户等待......
  • Web前端-3小时教你打造一个聊天室(websocket)
    Web前端-3小时教你打造一个聊天室(websocket)01-websocket概念02-H5中新增的websocketAPI03-nodejs开发自己的websoket服务04-使用websocket开发一个基本的聊天室05-使用websocket实现简单的聊天室06-socketio的基本用法07-socketio的基本用法08-使用socketio开发聊天室-登......