核心是“按需缓存、动态释放”,通过include白名单(如['UserList','OrderDetail','Dashboard'])和exclude黑名单(如['Login','NotFound','CreateUser'])精准控制缓存,配合max限制、LRU淘汰及activated/deactivated钩子实现内存可控的响应式缓存管理。

核心是“按需缓存、动态释放”——不是所有页面都该留着,也不是缓存了就永远不放。
include 做白名单:只缓存真正需要的组件
它明确列出哪些组件名要进缓存池,其余一律不缓存。关键前提是:每个路由组件必须定义 name,且和 include 中写的字符串完全一致。
- 推荐用数组形式管理,比如
include="['UserList', 'OrderDetail', 'Dashboard']" - 配合路由 meta 字段,在路由配置里标记
keepAlive: true,再统一收集到 include 列表中,可读性和维护性更好 - 适合缓存的页面:列表页(带筛选/排序)、多步骤表单、图表看板等状态贵、重建成本高的页面
exclude 做黑名单:主动排除不适合缓存的页面
当某些页面绝对不能保留旧状态时,直接在 exclude 里写死组件名,优先级高于 include。哪怕它同时出现在 include 里,也会被跳过。
- 典型场景:登录页、404 页面、新建表单页(如“新增用户”)、实时消息页
- 可以写成数组:
exclude="['Login', 'NotFound', 'CreateUser']",也可用正则匹配批量排除,例如/^Temp.*/排除所有临时页 - 特别注意:表单提交成功后跳转,若返回时不该带旧数据,就在目标路由的组件名加入 exclude
动态更新 include/exclude 列表
静态配置解决不了权限变化或用户行为带来的缓存需求变动,得靠响应式数据驱动。
- 在布局组件中用
ref或data定义响应式数组(如cachedNames),绑定到<keep-alive :include="cachedNames"> - 通过
watch监听当前路由route.name,按规则自动增删;或在路由守卫中根据to.meta.keepAlive动态计算 - 结合 Vuex/Pinia 统一管理缓存名单,便于跨组件同步与调试
配合 max 和运行时清理,防内存失控
光靠 include/exclude 还不够,得加上容量限制和手动干预能力。
- 设置
max="10",超出时按 LRU 自动淘汰最久未用的缓存,避免内存爆炸 - 在组件
activated/deactivated钩子中监听状态变化,触发delView清理指定缓存 - 例如:订单提交成功后,调用
this.$store.commit('DEL_CACHED_VIEW', 'OrderCreate'),下次打开就是干净新页面

















