Vue3 架构

Vue3 架构

一、核心前置认知

Vue 3 采用模块化、分层式架构设计(基于 Monorepo 管理),相比 Vue 2 的 "整体式" 架构,最大特点是「解耦核心逻辑、按需引入、跨平台扩展」,所有功能围绕「三大核心模块」展开,模块间通过标准化接口交互,兼顾灵活性与性能。

二、Vue 3 三大核心模块(核心拆解 + 职责标注)

Vue 3 的核心代码被拆分为编译时(Compiler)、运行时(Runtime)、响应式系统(Reactivity) 三大独立模块,且每个模块可单独使用(如仅用 Reactivity 做状态管理),是 Vue 3 架构的基石。

  1. 响应式系统(Reactivity):Vue 3 的 "数据引擎"
  • 核心定位:独立于渲染层的数据响应式核心,是 Vue 3 响应式能力的底层支撑(可脱离 Vue 单独使用,如 @vue/reactivity 包);
  • 核心职责
    • 基于 Proxy(替代 Vue 2 的 Object.defineProperty)实现数据的「拦截 - 依赖收集 - 触发更新」;
    • 管理响应式数据的依赖关系(如组件渲染函数、watch 回调、computed 计算属性);
    • 提供响应式 API(ref/reactive/computed/watch/effect 等);
  • 核心文件 / 包:packages/reactivity/,暴露 createReactiveObject、track(收集依赖)、trigger(触发更新)等核心方法;
  • 关键特性:支持数组 / Map/Set 等复杂数据类型、深层响应式惰性处理、可手动控制依赖(effect 调度)。
  1. 编译时模块(Compiler):Vue 3 的 "代码优化器"
  • 核心定位:将 .vue 单文件组件(SFC)/ 模板编译为「可执行的渲染函数(render)」,属于构建时环节(开发环境编译,生产环境仅用编译结果);
  • 核心职责
    • 模板解析(Parse):将 HTML 模板解析为 AST 抽象语法树;
    • 优化(Optimize):标记 AST 中的静态节点 / 静态根节点(Vue 3 核心优化点,运行时跳过静态节点更新);
    • 代码生成(Generate):将优化后的 AST 转换为带「补丁标记(PatchFlag)」的渲染函数;
    • 辅助功能:处理指令(v-if/v-for/v-model)、组件解析、样式提取(scoped/css module);
  • 核心文件 / 包:packages/compiler-core/(核心编译逻辑)、packages/compiler-dom/(针对 DOM 平台的编译扩展)、packages/compiler-sfc/(SFC 单文件组件编译);
  • 关键特性:编译时生成 PatchFlag(精准标记动态节点)、静态提升、缓存事件处理函数、Tree-shaking 友好。
  1. 运行时模块(Runtime):Vue 3 的 "渲染执行器"
  • 核心定位:负责执行编译后的渲染函数,完成「虚拟 DOM(VNode)创建 - 挂载 - 更新」,是连接响应式系统与真实 DOM 的桥梁;
  • 核心职责
    • VNode 体系:创建 VNode(虚拟节点)、维护 VNode 树结构;
    • 挂载(Mount):将 VNode 渲染为真实 DOM 并挂载到页面;
    • 更新(Patch):基于虚拟 DOM Diff 算法,对比新旧 VNode,执行最小化 DOM 操作;
    • 组件管理:组件实例创建(createApp/createComponentInstance)、生命周期调度、Props / 插槽处理;
  • 核心文件 / 包:packages/runtime-core/(跨平台核心运行时)、packages/runtime-dom/(DOM 平台运行时,处理 DOM 操作 / 事件);
  • 关键特性:基于 PatchFlag 的精准 Diff、组件级更新、跨平台渲染(支持 Web / 小程序 / 原生)。

三、三大模块交互逻辑(核心流程 + 模块联动)

Vue 3 所有功能的执行,本质是三大模块的协同工作,以「组件渲染 - 更新」为例,完整交互流程如下:

核心交互关键点标注

  1. Compiler → Runtime:编译后的渲染函数携带「PatchFlag」和「静态节点标记」,为 Runtime 的精准 Diff 提供依据;
  2. Runtime → Reactivity:执行渲染函数时,访问响应式数据会触发 track,收集 "渲染函数 - 数据" 的依赖关系;
  3. Reactivity → Runtime:响应式数据更新触发 trigger,通知 Runtime 重新执行渲染函数,完成 DOM 更新;
  4. 模块解耦:每个模块通过「接口约定」交互(如 Runtime 仅调用 Reactivity 的 effect/track/trigger,不耦合内部实现),可单独替换 / 扩展(如自定义 Compiler 生成适配小程序的渲染函数)。
相关推荐
NiceCloud喜云17 分钟前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
wordbaby1 小时前
React Native + RNOH:跨页面数据回传的最佳实践与避坑指南
前端·react native
丷丩1 小时前
MapLibre GL JS第22课:查看本地GeoJSON
前端·javascript·map·mapbox·maplibre gl js
Front思2 小时前
AI前端工程师需要具备能力+
前端·人工智能·ai
ZC跨境爬虫4 小时前
跟着 MDN 学CSS day_29:(掌握文本与字体样式的核心艺术)
前端·css·ui·html·tensorflow
李子琪。5 小时前
网络空间安全深度实战:CSRF 漏洞原理剖析与基于 Token 的纵深防御体系构建(全栈实验报告)
前端·安全·csrf
冰暮流星5 小时前
javascript之history对象介绍
前端·笔记
IT_陈寒5 小时前
Vite热更新失灵?你可能漏了这个配置
前端·人工智能·后端
丷丩5 小时前
MapLibre GL JS第19课:实时更新要素
前端·javascript·gis·map·mapbox·maplibre gl js
Mr.Daozhi5 小时前
RAG 进阶实战:跑通 Demo 后我连续翻了 6 次车,逐一修复才真正可用(含 Gradio Web 版)
前端·数据库·langchain·大模型·gradio·rag·科研工具