1. Vue 3 编译时优化(v-memo)在列表固定项的工程价值
v-memo 指令如何实现列表固定项的编译时优化?它的工程价值与使用注意点是什么?
- v-memo 接收依赖数组,依赖未变时跳过该子树更新
- 配合 v-for 缓存"几乎不变化"的列表项
- 更新粒度从"整组件"细化到"子树/节点"
v-memo="[depA, depB]" 声明该子树只在依赖数组变化时才重新渲染:依赖不变时,Vue 复用上一次创建的 VNode 子树,跳过 diff 与重建;依赖变化(或数组为空时恒更新)才重新创建。工程价值:当 v-for 列表中每项内部结构复杂、但只有少数项受某些状态影响时,v-memo 让更新粒度从"整个列表重新 diff"降到"仅依赖变化的项",显著提升渲染性能——典型场景是"巨型表格中仅某行高亮/展开",配合子组件 memo 化效果叠加。注意点:v-memo 的依赖数组必须穷举该项模板中用到的所有响应式依赖,漏写会导致 UI 不更新;它适合"结构稳定、依赖少而明确"的固定项,依赖频繁变化时收益消失且增加维护成本;与 v-once(彻底静态化)的区别是 v-memo 保留受控的动态能力。
本题考察"编译器时代码级优化指令":v-memo 是手动声明"跳过条件"的优化手段。回答要点是"依赖数组决定是否跳过 + 适用场景(列表固定项)+ 依赖穷举纪律",并对比 v-once 的静态化语义,说明收益与风险的边界。