vue框架实现原理
Vue 框架实现原理
Vue 是一个渐进式 JavaScript 框架,其核心实现原理主要包括响应式系统、虚拟 DOM、模板编译和组件化机制。
响应式系统
Vue 通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现数据劫持。当数据被访问或修改时,依赖收集和派发更新机制会自动触发视图重新渲染。

// Vue 2 响应式实现简化示例
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;
}
}
});
}
虚拟 DOM
Vue 通过虚拟 DOM 优化渲染性能。当数据变化时,生成新的虚拟 DOM 树,通过 Diff 算法对比新旧树差异,最小化真实 DOM 操作。
// 虚拟 DOM 简化结构
const vnode = {
tag: 'div',
props: { id: 'app' },
children: [
{ tag: 'span', children: 'Hello' }
]
};
模板编译
Vue 模板会被编译为渲染函数。编译过程包括解析(生成 AST)、优化(静态节点标记)和代码生成(生成渲染函数)。

// 模板编译结果示例
`<div>{{ message }}</div>`
// 编译为:
function render() {
return _c('div', [_v(_s(message))]);
}
组件化机制
Vue 组件是可复用的 Vue 实例。每个组件有自己的模板、数据和方法,通过组件树组织应用结构,支持父子通信(props/$emit)和全局状态管理(Vuex/Pinia)。
// 组件定义示例
Vue.component('my-component', {
template: '<div>A custom component!</div>'
});
核心流程
- 初始化阶段:创建 Vue 实例,初始化数据、计算属性、方法等,建立响应式系统。
- 模板编译:将模板转换为渲染函数(运行时编译或预编译)。
- 挂载阶段:执行渲染函数生成虚拟 DOM,并转换为真实 DOM 插入页面。
- 更新阶段:数据变化时触发重新渲染,通过虚拟 DOM Diff 算法高效更新视图。
响应式原理深入
Vue 3 使用 Proxy 实现更完善的响应式:
// Vue 3 响应式实现简化示例
function reactive(obj) {
return 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); // 派发更新
return true;
}
});
}





