必须显式设置 max 值,否则缓存无上限导致内存持续增长;max 支持数字或字符串类型的正整数,设为0、负数或非数字字符串则失效,超出时按 LRU 自动淘汰最久未激活实例,并需配合 include/exclude 精准控制缓存范围及组件内手动清理副作用。
必须显式设置 max 值,否则缓存无上限,内存会持续增长。Vue 的 <KeepAlive> 不设 max 就等于“来一个存一个”,尤其在路由频繁跳转或动态组件大量切换时,极易引发内存压力升高甚至泄漏。
它支持数字或字符串类型,值必须是正整数,表示最多保留几个组件实例:
<KeepAlive :max="5">
<KeepAlive max="5">
"abc"),否则失效,退化为无限制缓存1 表示只缓存最新一个组件,之前缓存的立即被剔除当缓存组件数量超过 max 设定值时,KeepAlive 会按 LRU(Least Recently Used,最近最少使用)规则自动清理:
max=3,此时切换到 E,A 会被移出缓存(假设 A 是最早一次被 activated 的)deactivated 中的副作用清理(如清除定时器、取消请求)光靠 max 不够,容易把不该缓存的组件也塞进去。建议叠加过滤策略:
include 明确只缓存指定组件:<KeepAlive :include="['UserList', 'OrderDetail']" :max="3">
exclude 排除高开销或状态易错乱的组件:<KeepAlive :exclude="['ReportChart']" :max="5">
name 选项(<script setup> 在 Vue ≥3.2.34 中会自动推导)才能被 include/exclude 匹配上线前建议确认这几项是否到位:
<KeepAlive> 标签都设置了 :max,不接受默认不设值include 白名单,避免被误剔exclude 或单独设低 max
deactivated 钩子中,已清理定时器、EventSource、未完成的 Promise 等资源