computed 依赖响应式数据缓存结果,仅在依赖变更时重新计算;解构响应式对象、忽略非响应式函数副作用、动态 key 访问不当会破坏依赖追踪,导致缓存失效或视图不同步。

Vue.js 的 computed 计算属性不是每次访问都重新执行,而是基于其依赖的数据进行响应式缓存——只要依赖未变,就直接返回上一次计算结果。这是它区别于 methods 的核心优势,也是性能优化的关键起点。
缓存触发条件:依赖追踪与响应式更新
computed 在初始化时会主动执行一次,期间 Vue 会通过 getter 中的响应式数据访问(如 this.count、this.list.length)自动收集依赖。之后只有当这些被追踪的响应式属性发生变更(即触发 setter 并通知依赖更新),该 computed 才会重新求值。
- 普通对象属性、ref、reactive 数据会被正确追踪
- 非响应式变量(如局部 const、Math.random()、Date.now())不会触发更新,也不参与缓存判断
- 异步操作(如 await、setTimeout 回调内修改)本身不构成依赖,但若修改了响应式数据,会间接触发更新
避免缓存失效的常见陷阱
缓存失效往往不是因为机制失灵,而是写法破坏了依赖追踪链:

