Computed 缓存优化本质是“不白算、不重算”:依赖不变时跳过 getter 直接返回缓存值,靠 dirty 标志控制——初始 true,首次访问执行并置 false,后续访问若 dirty 为 false 则复用结果;依赖变更仅标记 dirty = true,下次访问才重算。
Computed 的缓存优化,本质是“不白算、不重算”——它不会在依赖没变时执行 getter 函数,而是直接返回上次算好的值。
每个 computed 实例内部都有一个 dirty 布尔值:
这不是“执行了但结果一样”,而是连函数体都不会进入。比如:
const expensive = computed(() => { console.log('我被调用了'); return heavyCalc(); })expensive.value:打印日志,执行计算,缓存结果heavyCalc() 也只跑一次{{ expensive }},也只触发一次 getter只有当 Vue 明确追踪到的响应式依赖发生变化时,才会标记 dirty = true。注意:
myObj.x = 1),不会触发重新计算 —— 因为 Vue 不监听返回值的变更methods 是纯函数调用,每次用都执行;computed 是响应式节点,受依赖状态和 dirty 控制:
methods.sum():模板里写五次,执行五次computed.sum:模板里用五次,依赖不变时只算一次,其余四次全走缓存