当前位置:首页 > VUE

vue底层原理实现

2026-03-08 15:58:56VUE

Vue 底层原理实现

Vue.js 的核心原理包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是关键实现细节的分解:

响应式系统

Vue 2.x 使用 Object.defineProperty 实现数据劫持。通过递归遍历数据对象的属性,将其转换为 getter/setter,在属性被访问或修改时触发依赖收集和更新通知。

vue底层原理实现

function defineReactive(obj, key, val) {
  Object.defineProperty(obj, key, {
    get() {
      console.log('get', key);
      return val;
    },
    set(newVal) {
      if (newVal !== val) {
        console.log('set', key);
        val = newVal;
      }
    }
  });
}

Vue 3.x 改用 Proxy 代理整个对象,解决了 Vue 2.x 对数组和新增属性的监听限制:

vue底层原理实现

const proxy = new Proxy(obj, {
  get(target, key) {
    track(target, key); // 依赖收集
    return Reflect.get(target, key);
  },
  set(target, key, value) {
    Reflect.set(target, key, value);
    trigger(target, key); // 触发更新
  }
});

依赖收集与派发更新

  • Watcher:每个组件实例对应一个渲染 Watcher,在 getter 中收集依赖。
  • Dep:每个响应式属性关联一个 Dep 实例,用于管理依赖的 Watcher。
  • 更新流程:数据变更 → 触发 setter → 通知 Dep → 调用 Watcher 的 update 方法 → 触发重新渲染。

虚拟 DOM 与 Diff 算法

Vue 将模板编译为渲染函数,生成虚拟 DOM 树(VNode),通过 Diff 算法比对新旧 VNode 并高效更新真实 DOM。

Diff 优化策略

  • 同层比较,不跨层级。
  • 双端对比:通过头尾指针快速处理相同节点。
  • Key 优化:复用相同 Key 的节点。
function patch(oldVnode, newVnode) {
  if (sameVnode(oldVnode, newVnode)) {
    patchVnode(oldVnode, newVnode);
  } else {
    replaceNode(oldVnode, newVnode);
  }
}

模板编译

  1. 解析:将模板字符串转换为 AST(抽象语法树)。
  2. 优化:标记静态节点,避免重复渲染。
  3. 生成代码:将 AST 转换为可执行的渲染函数。
// 模板
<div>{{ message }}</div>

// 编译后渲染函数
function render() {
  return _c('div', [_v(_s(message))]);
}

组件化机制

  • 组件实例化:通过 Vue.extend 创建子类构造函数。
  • 生命周期管理:在特定阶段调用 createdmounted 等钩子。
  • 父子通信:props 向下传递,$emit 向上触发事件。

Vue 3 的优化

  1. 响应式升级:Proxy 替代 Object.defineProperty
  2. Composition API:逻辑复用更灵活。
  3. Tree-shaking:按需引入代码。
  4. 性能提升:编译时优化(如 Block Tree)、更高效的 Diff 算法。

关键源码模块

  • 响应式core/observer/
  • 虚拟 DOMcore/vdom/
  • 编译器compiler/
  • 运行时core/instance/

通过理解这些核心机制,可以更高效地使用 Vue 并解决复杂场景问题。

标签: 底层原理
分享给朋友:

相关文章

vue模版实现原理

vue模版实现原理

Vue 模板实现原理 Vue 的模板实现主要基于编译和虚拟 DOM 技术,将模板转换为可执行的渲染函数。以下是其核心实现原理: 模板编译过程 Vue 模板通过编译器将 HTML 模板字符串转换为渲染…

elementui底层

elementui底层

Element UI 是一个基于 Vue.js 的组件库,其底层实现涉及多个关键技术点。以下是其核心底层原理和实现方式的解析: Vue.js 组件化 Element UI 的组件基于 Vue.js…

vue keepalive 实现原理

vue keepalive 实现原理

Vue KeepAlive 实现原理 Vue 的 KeepAlive 是一个内置组件,用于缓存不活动的组件实例,避免重复渲染,提升性能。以下是其核心实现原理: 缓存机制 KeepAlive 通过维护…

vue vif实现原理

vue vif实现原理

Vue v-if 实现原理 Vue 的 v-if 指令通过条件渲染控制 DOM 元素的显示与隐藏。其实现原理基于虚拟 DOM 和编译阶段的代码生成。 编译阶段 模板中的 v-if 会被编译为渲染函数…

理解vue实现原理

理解vue实现原理

Vue 实现原理的核心机制 Vue.js 的核心实现基于响应式系统、虚拟 DOM 和组件化设计。通过数据劫持结合发布-订阅模式实现数据驱动视图的更新。 响应式系统 Vue 使用 Object.def…

vue route实现原理

vue route实现原理

Vue Router 实现原理 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。其核心实现基于以下机制: 路由模式 Vue Router 支持两种路由模式:…