computed 性能优于 methods,因其基于依赖缓存,依赖不变时多次访问直接返回缓存值;methods 每次渲染都重新执行且无缓存。

Vue.js 中 computed 相比 methods 在模板中调用时,渲染性能更优,核心在于缓存机制——计算属性会基于其依赖的数据进行缓存,只要依赖未变,多次访问直接返回缓存值;而 methods 每次渲染都会重新执行,无缓存。
依赖不变时,computed 不重复计算
当模板中多次使用同一个计算属性(如 {{ fullName }} 出现 3 次),Vue 只会在依赖(如 firstName、lastName)变化时重新求值一次,其余读取全部走缓存。而 methods 每次都会调用函数,即使结果完全一样,也会重复拼接字符串、遍历数组或执行复杂逻辑。
响应式系统能精确追踪 computed 的依赖
Vue 的响应式系统在初始化 computed 时,会自动收集它内部访问的响应式数据(如 this.count、this.list)作为依赖。一旦这些数据更新,才触发重新计算。methods 中的函数不会被依赖收集,即使它也读取了响应式数据,Vue 也无法判断它是否需要重跑,因此只能保守地每次执行。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
避免在模板中调用 methods 做派生数据处理
以下写法会带来性能隐患:
立即学习“前端免费学习笔记(深入)”;
-
不推荐:
{{ formatPrice(item.price) }}(每次渲染都执行 formatPrice) -
推荐:
{{ item.formattedPrice }}(用 computed 或在 data/computed 中预计算) - 若需传参动态计算(如
filterBy(status)),computed 无法直接支持,此时应结合 memoized 函数(如用 lodash.memoize)或改用 带参数的 method + 外部缓存,而非放弃缓存
调试与可观测性更清晰
computed 是声明式的:你定义“它是什么”,Vue 管理“何时更新”。它有明确的 getter(和可选 setter),可在 Vue Devtools 中查看当前值、依赖项及是否已缓存。methods 是命令式的,调用时机和频次由模板渲染节奏决定,难以直观判断是否过度执行。


















