当前位置:首页 > VUE

vue computed实现机制

2026-02-18 11:28:57VUE

Vue computed 实现机制

Vue 的 computed 属性是基于响应式依赖的缓存机制,其核心实现依赖于 Vue 的响应式系统和依赖收集。

依赖收集与响应式

Vue 通过 Object.definePropertyProxy(Vue 3)劫持数据的访问和修改。当计算属性被访问时,会触发其 getter 函数,此时 Vue 会将当前计算属性和其依赖的响应式数据建立关联。

// 伪代码:计算属性初始化
function initComputed(vm, computed) {
  const watchers = {};
  for (const key in computed) {
    const getter = computed[key];
    watchers[key] = new Watcher(vm, getter, { lazy: true });
    defineComputed(vm, key, watchers[key]);
  }
}

缓存机制

计算属性会缓存计算结果,只有当其依赖的响应式数据发生变化时,才会重新计算。这是通过 dirty 标志实现的:

vue computed实现机制

  • 初次访问时,计算属性会执行计算并缓存结果。
  • 依赖数据变化时,标记 dirtytrue,下次访问时重新计算。
  • 未变化时直接返回缓存值。
// 伪代码:计算属性 getter
function createComputedGetter(key) {
  return function computedGetter() {
    const watcher = this._computedWatchers[key];
    if (watcher.dirty) {
      watcher.evaluate(); // 重新计算
    }
    if (Dep.target) {
      watcher.depend(); // 收集依赖
    }
    return watcher.value;
  };
}

与 Watch 的区别

  • computed 是惰性求值,依赖变化时才重新计算。
  • watch 是主动监听,适合执行副作用(如异步操作)。
  • computed 必须有返回值,watch 不需要。

性能优化

  • 避免在计算属性中执行耗时操作。
  • 减少不必要的依赖,拆分复杂计算属性。
  • Vue 3 的 computed 基于 Proxy 优化了依赖追踪效率。

实现流程总结

  1. 初始化阶段,为每个计算属性创建独立的 Watcher
  2. 访问计算属性时触发 getter,进行依赖收集。
  3. 依赖变化时标记 dirty,下次访问时重新计算。
  4. 无变化时直接返回缓存值,避免重复计算。

标签: 机制vue
分享给朋友:

相关文章

vue 实现在线预览

vue 实现在线预览

Vue 实现在线预览的常见方法 使用 iframe 嵌入 通过 iframe 标签可以嵌入多种类型的文件,如 PDF、图片、网页等。需要确保文件地址可访问。 <template> &…

vue router 实现

vue router 实现

Vue Router 的实现 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是 Vue Router 的核心实现方式。 安装 Vue Router 通过…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue实现ios

vue实现ios

Vue 实现 iOS 风格应用 使用 Vue 实现 iOS 风格的应用,可以通过结合 UI 框架和自定义样式来达成目标。以下是具体方法和步骤: 选择 iOS 风格的 UI 框架 Vue 生态中有多…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

vue动画实现

vue动画实现

Vue动画实现方法 Vue提供了多种方式实现动画效果,主要通过内置组件和第三方库完成。 使用<transition>组件 Vue内置的<transition>组件可以为元素添…