vue3底层实现
Vue 3 底层实现核心机制
Vue 3 通过以下关键技术实现响应式和组件化:
响应式系统
基于 Proxy 的响应式替代了 Vue 2 的 Object.defineProperty。通过 reactive() 函数创建响应式对象,内部使用 Proxy 拦截 get/set 操作,自动跟踪依赖和触发更新。
function reactive(target) {
return new Proxy(target, {
get(target, key, receiver) {
track(target, key) // 依赖收集
return Reflect.get(target, key, receiver)
},
set(target, key, value, receiver) {
Reflect.set(target, key, value, receiver)
trigger(target, key) // 触发更新
return true
}
})
}
虚拟 DOM 优化
引入 Block Tree 和 Patch Flags 机制,编译时静态分析模板,标记动态节点类型(如 CLASS、PROPS),减少运行时 diff 成本。

// Patch Flags 示例
const dynamicProps = {
class: 'active', // 静态
id: ctx.id // 动态(标记为 PROPS)
}
编译器优化
模板编译为渲染函数时进行静态提升(Hoisting),将静态节点提取到渲染函数外部,避免重复创建 VNode。
// 编译结果示例
const _hoisted_1 = createVNode('div', null, '静态节点')
function render() {
return [_hoisted_1, createVNode('div', null, ctx.dynamic)]
}
Composition API
基于函数的 API 设计,通过 setup() 函数实现逻辑组合。依赖 effect 和 ref 等响应式原语,支持更灵活的代码组织方式。

import { ref, effect } from 'vue'
export default {
setup() {
const count = ref(0)
effect(() => {
console.log('count changed:', count.value)
})
return { count }
}
}
组件实例管理
采用面向树的实例管理结构,通过 instance.uid 唯一标识组件,父子组件通过 parent/children 属性关联,优化了实例创建和销毁性能。
性能优化措施
静态树提升(Tree Shaking)
基于 ES Module 的按需编译,通过 /*#__PURE__*/ 注释标记纯函数,配合打包工具删除未使用代码。
缓存事件处理
对事件处理函数进行自动缓存,避免每次渲染都创建新函数,减少 GC 压力。
// 编译后的事件处理
function render() {
return createVNode('button', {
onClick: _cache[1] || (_cache[1] = e => ctx.handleClick(e))
})
}
调度系统
基于优先级的异步更新队列,通过 queueJob 和 queuePostFlushCb 管理更新任务,使用 Promise.resolve().then() 实现微任务调度。






