首页 > 编程语言 >JavaScript 的事件循环、宏任务、微任务

JavaScript 的事件循环、宏任务、微任务

时间:2024-08-27 09:47:49浏览次数:15  
标签:异步 JavaScript 任务 循环 事件 执行

JavaScrtipt 执行顺序

首先,必须要明确,在JavaScript中,所有任务都在主线程上执行。任务执行过程分为同步任务异步任务两个阶段。异步任务的处理经历两个主要阶段:Event Table(事件表)和 Event Queue(事件队列)。Event Table存储了宏任务的相关信息,包括事件监听和相应的回调函数。当特定类型的事件发生时,对应的回调函数被添加到事件队列中,等待执行。例如,你可以通过addEventListener来将事件监听器注册到事件表上。
执行流程图
image

事件循环

  1. 概念:在事件循环中,当主线程执行完当前的同步任务后,会检查事件队列中是否有待处理的事件。如果有,主线程会取出事件并执行对应的回调函数。这个循环的过程被称为事件循环(Event Loop),它由主线程和任务队列两部分组成。主线程负责执行同步任务,而异步任务则通过任务队列进行处理。这种机制保证了异步任务在适当的时机能够插入执行,从而实现了JavaScript的非阻塞异步执行。
  2. 执行步骤:
    事件循环的tick机制是指事件循环在每个迭代中执行的操作。一个tick通常包括以下步骤:
    执行栈清空:JavaScript引擎首先执行执行栈中的所有同步任务。
    微任务执行:执行栈清空后,事件循环会执行所有可用的微任务。
    宏任务执行:微任务执行完毕后,事件循环会从宏任务队列中取出一个任务并执行。
    渲染更新:在浏览器环境中,UI渲染可能会在每个tick之后发生,以更新浏览器界面。

概括

js有两种任务,同步任务和异步任务;异步任务通过任务队列机制来执行代码;任务队列里面分微任务和宏任务。宏任务是由宿主发起的,而微任务由JavaScript自身发起。
微任务:promise process.nextTick() Proxy MutaionObserver
宏任务:setTimeout \ setInterval \ setImmediate \ I/O \ UI交互 、 DOM事件 、 网络请求

标签:异步,JavaScript,任务,循环,事件,执行
From: https://www.cnblogs.com/zxn-114477/p/18382062

相关文章

  • javascript怎么实现链表?
    在JavaScript中实现链表通常涉及定义一个链表节点类(通常称为ListNode)和一个链表类(例如LinkedList),然后在这个链表类中实现各种操作链表的方法,如添加节点、删除节点、遍历链表等。以下是使用JavaScript实现单向链表的一个基本示例:链表节点类(ListNode)首先,我们定义一个链表节点......
  • 【JavaScript】String常用方法
    String的常用方法长度s.length拼接字符串s.concat('内容','可拼接多个'),或者使用+号链接符,返回一个新字符串位置查找字符串方法;返回字符​查找某位置上的字符s.charAt(下标)返回该下标位置上的字符,未找到返回空白​返回某位置上的字符s[下标](只读,不能赋值),不支......
  • JavaScript 对象访问器
    JavaScript访问器(Getter和Setter)Getter和Setter允许您定义对象访问器(被计算的属性)。<!DOCTYPEhtml><htmllang="en"><body><pid="demo"></p><script>constperson={nama:"DianDi......
  • [javascript] 使用 puppeteer 包模拟 chrome 自动化
    npmipuppeteerconstpuppeteer=require('puppeteer');functionsleep(ms){returnnewPromise(resolve=>setTimeout(resolve,ms));}asyncfunctionrun(){constbrowser=awaitpuppeteer.launch({headless:false,args:['--st......
  • Python分布式任务处理库之dramatiq使用详解
    概要在现代Web应用和数据处理任务中,异步任务处理是一个至关重要的部分。Dramatiq是一个用于分布式任务处理的Python库,旨在提供简单、可靠的任务队列解决方案。与其他任务队列库相比,Dramatiq更加轻量级,且易于上手。它的设计目标是帮助开发者轻松地将耗时的任务放到后台......
  • Java计算机毕业设计研究生-导师任务管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在高等教育领域,研究生教育与导师之间的有效沟通与合作是确保研究质量、促进学生成长的关键环节。然而,随着研究生招生规模的扩大和科研项目的复杂化,传......
  • 网站提示508 Loop Detected:服务器检测到请求循环怎么办
    当遇到“508LoopDetected”错误时,这意味着服务器检测到了请求循环,即客户端的请求被服务器重定向回客户端自身,形成了一个无限循环。这种错误通常发生在以下几种情况:重定向循环:客户端请求被服务器重定向,但重定向的URL最终又指向了原始请求的URL。代理或网关配置错误:代理服务器......
  • 定制任务服务 ScheduledTaskService
    自定义的定时任务服务ScheduledTaskService packagecom.joyupx.service.impl.task;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.scheduling.Trigger;importorg.springframework.sc......
  • 任务悬赏小程序开发,无门槛提现的悬赏赚钱小程序搭建
    技术栈前端:vue3+uniapp后端:PHP数据库:MySQL一、关于任务悬赏小程序1.任务悬赏:线报任务,论坛,广告任务,游戏试玩,语音红包任务。2.支持会员发单功能,达人分销,任务查看,佣金提现。3.联系客服,会员充值等功能。4.系统含任务素材二、小程序功能特色任务悬赏小程序是一种创新的......
  • FreeRTOS 快速入门(八)之任务通知
    目录一、任务通知1、基本概念2、优势及限制3、通知状态和通知值二、任务通知的使用1、xTaskNotifyGive/ulTaskNotifyTake2、xTaskNotify/xTaskNotifyWait3、xTaskNotifyAndQuery一、任务通知1、基本概念FreeRTOS从V8.2.0版本开始提供任务通知这个功能,每个任务......