当前位置:首页 > VUE

vue 实现原理比较

2026-02-19 01:34:21VUE

Vue 2 实现原理

Vue 2 的核心实现基于响应式系统虚拟 DOM。响应式系统通过 Object.defineProperty 劫持数据的 gettersetter,在数据变化时触发依赖更新。虚拟 DOM 则通过 diff 算法比对变化,高效更新真实 DOM。

  • 响应式系统
    初始化时递归遍历 data 对象,为每个属性添加 getter/setter。依赖收集通过 DepWatcher 实现,每个属性对应一个 DepWatcher 在渲染时触发 getter 并订阅 Dep,数据变化时 Dep 通知所有 Watcher 更新。

  • 虚拟 DOM
    模板编译为 render 函数,生成虚拟 DOM 树。通过 patch 方法对比新旧虚拟 DOM,计算出最小变更(如节点增删、属性更新),批量更新到真实 DOM。

  • 模板编译
    模板通过 vue-template-compiler 转换为 render 函数,包含静态优化(标记静态节点避免重复渲染)。

Vue 3 实现原理

Vue 3 在响应式系统和编译优化上做了重大改进,性能显著提升。

  • 响应式系统
    使用 Proxy 替代 Object.defineProperty,支持动态添加/删除属性,无需递归初始化。依赖跟踪通过 effect(类似 Watcher)和 ReactiveEffect 实现,Proxyget/set 拦截更高效。

  • 虚拟 DOM 优化
    引入 Block TreePatch Flags

    • Block Tree:动态节点按结构划分,减少 diff 范围。
    • Patch Flags:标记动态节点类型(如 CLASSSTYLE),跳过静态节点比对。
  • 编译优化
    模板编译时生成更高效的 render 函数:

    vue 实现原理比较

    • 静态提升:将静态节点提取为常量,避免重复创建。
    • 事件缓存:缓存内联事件处理函数,减少不必要的更新。

核心差异对比

特性 Vue 2 Vue 3
响应式 Object.defineProperty Proxy
虚拟 DOM 全量 diff 基于 Patch Flags 的靶向更新
性能 需递归劫持数据,初始化较慢 按需响应,初始化更快
Composition API 无(需 Mixins) 支持逻辑复用

代码示例

Vue 2 响应式实现片段

function defineReactive(obj, key) {
  const dep = new Dep();
  let val = obj[key];
  Object.defineProperty(obj, key, {
    get() {
      if (Dep.target) dep.depend(); // 收集依赖
      return val;
    },
    set(newVal) {
      val = newVal;
      dep.notify(); // 触发更新
    }
  });
}

Vue 3 响应式实现片段

function reactive(obj) {
  return new Proxy(obj, {
    get(target, key) {
      track(target, key); // 依赖收集
      return target[key];
    },
    set(target, key, value) {
      target[key] = value;
      trigger(target, key); // 触发更新
    }
  });
}

标签: 原理vue
分享给朋友:

相关文章

vue实现系统

vue实现系统

Vue 实现系统的核心方法 使用 Vue.js 构建系统时,需结合其响应式特性与组件化开发模式。以下为关键实现路径: 项目初始化与工程配置 通过 Vue CLI 或 Vite 创建项目骨架,推荐选择…

vue实现树形

vue实现树形

Vue 实现树形组件 在 Vue 中实现树形结构通常需要递归组件和动态数据绑定。以下是实现树形组件的几种常见方法。 递归组件实现 递归组件是 Vue 中实现树形结构的核心方法。通过组件调用自身,可以…

vue实现画板

vue实现画板

Vue 实现画板功能 在 Vue 中实现画板功能可以通过 HTML5 的 Canvas API 实现。以下是一个完整的实现方案: 创建 Vue 组件 新建一个 Vue 单文件组件(SFC),命名为…

vue for实现

vue for实现

Vue 中的 v-for 指令 v-for 是 Vue.js 中用于渲染列表数据的核心指令,通过遍历数组或对象生成动态内容。 基本语法(数组) <ul> <li v-for…

vue远离实现

vue远离实现

Vue 原理实现 Vue.js 的核心原理包括响应式系统、虚拟 DOM、模板编译和组件化机制。以下是其关键实现原理的详细解析。 响应式系统 Vue 的响应式系统基于 Object.definePro…

vue实现树目录

vue实现树目录

Vue 实现树形目录 在 Vue 中实现树形目录可以通过递归组件或第三方库(如 element-ui 的 el-tree)完成。以下是两种常见实现方式: 递归组件实现 递归组件适合自定义程度高的树形…