Vue KeepAlive 原理深度解析:从使用到底层实现
目录一、什么是 KeepAlive二、KeepAlive 的核心数据结构三、KeepAlive 的工作原理三步走第 1 步挂载时首次渲染——“存”第 2 步切换离开时失活——“停”第 3 步切换回来时激活——“取”四、KeepAlive 的“内存管理”机制五、常被问到的两个面试点六、实际开发中的避坑指南1. 配合 include / exclude 按需缓存2. 务必搭配 max 防止内存泄漏3. 在 onActivated 中刷新数据而非 onMounted4. Vue 2 vs Vue 3 的细微差别七、总结一、什么是 KeepAliveKeepAlive是 Vue 内置的一个抽象组件它的核心作用就像手机上的“后台应用管理”——当你从 A 页面切到 B 页面时A 页面不会被销毁而是被“冻住”放在后台。当你再切回来时页面瞬间恢复就像从来没有离开过。template !-- ❌ 没有 KeepAlive切走即销毁切回重建 -- component :iscurrentTab / !-- ✅ 有 KeepAlive切走即缓存切回恢复 -- KeepAlive component :iscurrentTab / /KeepAlive /template两种模式的对比场景无 KeepAlive有 KeepAliveA 切到 BA 执行unmounted组件被销毁A 执行deactivated组件被缓存B 切回 AA 重新mounted数据重置页面闪烁A 执行activated瞬间恢复状态保留二、KeepAlive 的核心数据结构在 Vue 3 源码中KeepAlive组件内部维护了两个核心变量// 伪代码 —— KeepAlive 内部核心数据结构 const cache: Mapstring, VNode new Map(); // 缓存池key - VNode const keys: string[] []; // 缓存列表用于 LRU 淘汰策略cache一个Map对象键是组件的唯一标识默认用组件的name属性值是该组件的VNode虚拟节点。VNode 上挂着组件实例componentInstance和真实 DOMel所以缓存 VNode 就等于缓存了一切。keys一个数组按访问顺序存储所有缓存的key用于实现 LRU最近最少使用淘汰算法。三、KeepAlive 的工作原理三步走第 1 步挂载时首次渲染——“存”当KeepAlive第一次渲染它的默认插槽时获取第一个子组件的 VNode。生成唯一的key优先取组件name否则自动生成。检查cache中是否已有该key没有首次访问将当前 VNode 存入cache.set(key, vnode)同时keys.push(key)。有命中缓存直接取出缓存的 VNode复用该实例。将选中的 VNode 返回给渲染器去挂载。第 2 步切换离开时失活——“停”当被包裹的组件切换走时KeepAlive并不会调用unmount去销毁它。而是调用deactivate失活函数将组件实例标记为失活状态。触发该组件的deactivated生命周期钩子。最关键的是组件实例和对应的真实 DOM 依然保留在内存中未被移除。第 3 步切换回来时激活——“取”当再次切换回该组件时KeepAlive从cache中根据key取出之前缓存的 VNode。该 VNode 仍然挂载着之前的组件实例和 DOM 元素。将失活标记取消。直接复用这个实例和 DOM 进行渲染跳过创建和挂载过程。触发该组件的activated生命周期钩子。四、KeepAlive 的“内存管理”机制如果KeepAlive设置了max属性最大缓存数量它不会无限累积而是采用LRULeast Recently Used最近最少使用淘汰算法。淘汰逻辑源码精简// 当缓存数量超过 max 时 if (keys.length max) { // 1. 从 keys 数组中移除第一个最早存入且未被访问的key const oldestKey keys.shift(); // 2. 从 cache 中删除对应的 VNode cache.delete(oldestKey); // 3. 如果是组件实例执行真正的销毁释放内存 }通俗理解缓存队列就像一个“候车厅的座位”。如果座位满了最新上车的乘客最近访问的坐进来最久没被叫到名字的乘客最早缓存的就要被请出去把座位让出来。生命周期对照图状态有无KeepAlive触发的钩子组件首次进入无 / 有onMounted→onActivated切走离开无onUnmounted销毁切走离开有onDeactivated失活不销毁切回进入无onMounted重建切回进入有onActivated复用不重建缓存被 LRU 淘汰超出 max有onUnmounted真正销毁五、常被问到的两个面试点Q1KeepAlive 缓存的是什么是 DOM 还是数据缓存的是VNode虚拟节点 组件实例Component Instance。组件的 data、computed、methods 都挂在实例上所以数据、状态、DOM 结构都被完整保留。Q2为什么说 KeepAlive 是“抽象组件”因为它不渲染任何 DOM 节点也不出现在父组件的层级关系中。它只是一个逻辑容器在渲染函数中直接返回被包裹的子组件自己只充当一个“管理者”的角色。六、实际开发中的避坑指南1. 配合include/exclude按需缓存KeepAlive :include[Home, About] router-view / /KeepAlive只缓存名为Home和About的组件其他组件正常销毁。2. 务必搭配max防止内存泄漏如果路由页面非常多且不加max限制所有访问过的页面都会常驻内存极易导致移动端白屏或卡顿。KeepAlive :max10 router-view / /KeepAlive3. 在onActivated中刷新数据而非onMountedscript setup import { onActivated } from vue; // ❌ 错误切回时不会触发 onMounted onMounted(() fetchData()); // ✅ 正确每次激活都会触发 onActivated(() fetchData()); /script4. Vue 2 vs Vue 3 的细微差别对比项Vue 2Vue 3组件名keep-alive全小写KeepAlive驼峰模板中两者都支持匹配规则基础匹配更严格支持正则表达式生态兼容-结合Suspense/Teleport兼容性更好七、总结KeepAlive 的本质是一个缓存管理器它不渲染任何 DOM只管理被包裹组件的 VNode 生命周期核心是cachekeys用 Map 存 VNode用数组管理顺序LRU 淘汰策略确保内存可控防止页面越用越卡activated/deactivated是缓存组件的专属生命周期钩子一句话记住它KeepAlive 让组件在切换时“假死”而非“真死”从而换取极致的返回体验。PS本文由deepseek辅助生成

相关新闻

IDEA创建Spring Boot项目:3种方式深度对比(Gradle/Maven/Initializr),附JVM参数调优+离线构建配置(内含企业级CI/CD预埋脚本)

IDEA创建Spring Boot项目:3种方式深度对比(Gradle/Maven/Initializr),附JVM参数调优+离线构建配置(内含企业级CI/CD预埋脚本)

更多请点击: https://kaifayun.com 第一章:IDEA创建Spring Boot项目的全景认知 IntelliJ IDEA 作为主流 Java 集成开发环境,为 Spring Boot 项目提供了开箱即用的工程化支持。其内置的 Spring Initializr 向导可快速生成符合官方规范的起步依…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述:为什么X-Frame-Options是Web安全的“防盗门”?最近在排查一个老项目的安全审计报告时,又被提到了“点击劫持”风险,矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了,很多开发团队,尤…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
基于三维透镜建筑与AI轨迹重构的核电站智能化升级

基于三维透镜建筑与AI轨迹重构的核电站智能化升级

基于三维透镜建筑与AI轨迹重构的核电站智能化升级为全面提升核电站安全生产管控、风险预警及应急处置能力,破解传统核电厂区盲区多、人员监管碎片化、环境数据滞后、人因风险难预判等行业痛点,本次升级依托多源传感器全域数据采集体系,搭载自…

2026/6/27 1:34:13阅读更多 →
华为应用市场提示”业务不合规”?一次真实上架经历,谈谈我的一些看法

华为应用市场提示”业务不合规”?一次真实上架经历,谈谈我的一些看法

华为应用市场提示”业务不合规”?一次真实上架经历,说说我的一些看法作者:码尚友技术团队最近不少开发者问我:“华为应用市场提示业务不合规,到底是什么意思?”网上大多数文章都会告诉你,是营业…

2026/6/27 1:34:13阅读更多 →
Dell PowerEdge R720 的 iDRAC7 是独立于操作系统的远程管理模块,即使服务器关机(只要通电)也可进行硬件监控、远程开关机及系统安装。以下是核心操作教程:

Dell PowerEdge R720 的 iDRAC7 是独立于操作系统的远程管理模块,即使服务器关机(只要通电)也可进行硬件监控、远程开关机及系统安装。以下是核心操作教程:

Dell PowerEdge R720 的 iDRAC7 是独立于操作系统的远程管理模块,即使服务器关机(只要通电)也可进行硬件监控、远程开关机及系统安装。以下是核心操作教程:1. 初始网络配置与登录若未配置过 IP,需通过服务器本地或前面…

2026/6/27 1:34:13阅读更多 →
从零实战|2026企业级LLM Wiki私有化部署(Ollama+Python)完整落地:增量编译、断点续跑、质量校验、混合检索

从零实战|2026企业级LLM Wiki私有化部署(Ollama+Python)完整落地:增量编译、断点续跑、质量校验、混合检索

专栏系列:2026全新进阶:从传统RAG到LLM Wiki企业级落地(大厂架构、混合范式、工程实战、避坑指南)阅读定位:零基础实战、可直接上线的源码工程、私有化部署、核心算法手写实现适合人群:大模型应用开发、AI工…

2026/6/27 1:29:13阅读更多 →
福建高定木作品牌:亲测效果与案例分享

福建高定木作品牌:亲测效果与案例分享

开篇:定下基调在福建的高端定制木作市场,消费者对于品质、个性化以及环保性能的需求日益增长。为了帮助对高定木作感兴趣的人群挑选到合适的产品,我们基于真实数据与体验,无任何商业倾向地开展了本次测评。参与本次测评的产品为梦…

2026/6/27 1:29:13阅读更多 →
「2026亲测」直击Turnitin算法:英文论文AI率97%降至8%的硬核指南

「2026亲测」直击Turnitin算法:英文论文AI率97%降至8%的硬核指南

大家面对turnitin检测的时候肯定都特别头疼,尤其非母语写长文真的很容易飘红。 我自己这段时间踩了无数个坑,特意熬了几天夜,试出来几个真正靠谱的留学生降ai方法,今天就把这些测试结果全部掏出来。 这篇文章会详细拆解5个主流工…

2026/6/27 1:29:13阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/26 4:15:25阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →