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

前端面试宝典---事件循环面试题

浏览器进程模型与 JavaScript 执行机制

现代浏览器采用多进程架构,包含浏览器进程、渲染进程、网络进程等多个核心进程。每个标签页会独立创建一个渲染进程,负责页面内容的解析、渲染和执行脚本代码。

JavaScript 的单线程特性

JavaScript 采用单线程执行模型,其主线程同时承担两个关键职责:

  • GUI 渲染线程:处理 HTML/CSS 解析、样式计算、布局绘制(每秒 60 帧渲染)
  • JS 引擎线程:执行全局代码和回调函数

这两个功能模块存在互斥关系,无法并行执行。单线程设计避免了多线程环境下 DOM 操作的竞态条件问题(如一个线程删除 DOM 时另一个线程在修改),同时也简化了语言实现复杂度。异步机制则解决了耗时操作可能造成的线程阻塞问题。

异步执行原理

同步执行模式可能导致主线程阻塞,引发页面卡顿。浏览器采用异步处理机制:

  • 主线程将计时器、网络请求等任务委托给对应线程
  • 主线程继续执行后续同步代码
  • 任务完成后,回调函数被封装为任务对象加入消息队列
  • 主线程通过事件循环机制调度这些异步任务

这种模式确保主线程始终保持响应能力,同时兼顾任务处理的时效性。

任务优先级分级

消息队列采用分级调度策略:

  • 宏任务(MacroTask):脚本整体代码、setTimeout、I/O 等
  • 微任务(MicroTask):Promise、MutationObserver 等

微任务具有更高优先级,确保关键更新能及时处理(如 Promise 的状态变更),而定时器等相对不敏感的宏任务可以适当延迟执行。

完整事件循环流程

  1. 同步代码执行阶段
    主线程顺序执行全局脚本,遇到异步 API 时移交对应模块处理

  2. 微任务检查并清空
    当前调用栈清空后,立即执行全部微任务队列中的任务

  3. 宏任务处理
    选取最早的宏任务执行,执行期间产生的微任务会在该宏任务结束后立即处理

  4. 渲染时机判断
    若距离上次渲染超过 16ms(60Hz 屏幕),或页面内容发生变化,则执行渲染任务,若没有,回到步骤 3 继续执行下一个宏任务。

  5. 循环持续
    重复上述过程直至所有任务队列清空

相关文章:

  • 现代数据工程实践:基于Dagster的ETL架构设计与实现
  • 【全开源】码小象租车系统源码+uniapp前端+开发文档接口
  • python数据结构和算法(5)
  • P1216 [IOI 1994] 数字三角形 Number Triangles
  • 7.Vue的compute计算属性
  • 【VBA】把目录及子目录下所有doc/docx转换为pdf格式
  • synchronized 学习序章
  • 第三章支线五 ·组件之城 · 构建与复用的魔法工坊
  • 鹰盾加密虚拟机保护技术的深度解析:从指令级虚拟化到动态对抗系统
  • 【一文理解】下采样与上采样区别
  • 代码随想录算法训练营第60期第六十四天打卡
  • 什么是数据转换?数据转换有哪些方式?
  • C++ 智能指针实现原理
  • 香橙派3B学习笔记9:Linux基础gcc/g++编译__C/C++中动态链接库(.so)的编译与使用
  • Mybatisplus3.5.6,用String处理数据库列为JSONB字段
  • 【CF】Day80——Codeforces Round 872 (Div. 2) C⭐D (思维 + 模拟 | 树 + 思维 + 组合数学 + 分数取模)
  • 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
  • 【valse2025】CV与ML领域重要进展
  • python打卡训练营打卡记录day50
  • 【Java工程师面试全攻略】Day7:分布式系统设计面试精要
  • 建站行业有哪些公司/百度竞价关键词出价技巧
  • 做网站读什么专业/深圳网站建设推广优化公司
  • html简单代码模板/seo工具包
  • wordpress如何添加二级菜单/seo是什么意思 职业
  • 降龙网络专业做网站/营销培训方案
  • 何炅做的代言网站/电子商务网站开发