2025前端面试-浏览器的事件循环和浏览器的事件循环的区别是什么---002

浏览器的事件循环和浏览器的事件循环的区别是什么

  • JS是单线程的
  • 浏览器中JS执行和DOM渲染公用一个线程
  • 异步

异步中又有宏任务和微任务

  • 宏任务 setTimtout setInterval
  • 微任务 Promise async await
  • (先执行同步任务后执行异步任务)微任务在下一轮DOM渲染之前 执行,宏任务在渲染之后执行

在执行完同步任务之后 在遇到异步事件如ajax settimaout等之后 会先将这些事件添加到对应的任务执行队列中,之后会触发事件循环机制 会首先对于添加到微任务队列中的部分进行执行,再对于宏任务队列中的函数进行执行

并且会在一定时间中进行询问查看(循环)是否队列中有未完成的任务---因为例如ajax的请求返回之后就会需要一定的执行时间

Nodejs 异步

  • Nodejs 同样使用ES语法,也是单线程,也需要异步
  • 异步任务分为:宏任务+微任务
  • 但是其宏任务和微任务 分为不同类型,有不同的优先级
宏任务:
  1. Timer -setTimeout
  2. I/O callbacks -处理网络,流,TCP的错误回调
  3. Idle,prepare- 闲置状态(nodejs内部使用
  4. Poll 轮询 -执行poll中的I/O队列
  5. Check 检查- 存储 setImmediate回调
  6. Close callbacks -关闭回调 如 socket.on('close')

微任务:

  1. promise,async/await,process.nextTick(最高)---推荐使用setImmediate代替 process.nextTIck
  • 执行同步代码
  • 执行微任务
  • 按顺序执行6个类型的宏任务(每个宏任务执行之前都确保上一级的微任务已经执行完
相关推荐
泯泷3 小时前
手搓JSVMM第 8 篇:函数调用:参数、返回值与调用帧
前端·javascript·前端框架
Sherotree4 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
Mr数据杨4 小时前
【Codex】用学生入学评估模块建立新生能力画像
android·java·javascript·django·codex·项目开发
里欧跑得慢4 小时前
Flutter 像素级还原:设计稿到代码的视觉无损转换技巧
前端·css·flutter·web
里欧跑得慢4 小时前
Flutter 三方库 function_tree — 鸿蒙应用开发中的动态数学公式解析与计算神器,实现鸿蒙深度适配下的复杂函数逻辑运行时求值实战(适配鸿蒙 HarmonyOS Next ohos)
android·前端·安全·flutter·华为·harmonyos
苏灿烤鱼5 小时前
没有机密文件,也没有付费数据,在浏览器里造一颗"间谍卫星"
前端·javascript·github
leonkay5 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
泯泷5 小时前
手搓JSVM第 5 篇:写第一个编译器:从 AST 生成 IR
前端·javascript·算法
泯泷5 小时前
手搓JSVM第 7 篇:控制流:if、while 与 jump
前端·javascript·算法
泯泷6 小时前
手搓JSVM第 6 篇:把 IR 编成字节码:emit 与 label fixup
前端·javascript·算法