目录

一、什么是keep-alive?

与普通组件切换的对比

二、核心用法详解

1. 基础用法:动态组件缓存

2. 路由视图缓存 

3. 生命周期钩子

三、进阶配置与优化

1. 精准控制缓存组件

(1)include/exclude属性

(2)max属性限制缓存数量

四、实战场景与案例

1. 表单数据保存

2. 标签页切换优化

3. 动态控制缓存

五、避坑指南

1. 组件必须定义name属性

2. 避免过度缓存

3. 相同路由不同参数导致缓存失效

六、性能优化建议

七、总结


一、什么是keep-alive

keep-alive是Vue2中用于缓存不活跃组件实例的抽象组件。其核心作用是:

  • 保留组件状态(如表单输入、滚动位置、定时器等)
  • 避免重复渲染(跳过created/mounted等生命周期)
  • 优化性能(减少DOM操作和数据请求)

与普通组件切换的对比

场景普通组件keep-alive包裹组件
切换时销毁并重建隐藏并缓存
状态保留
性能开销高(需重新渲染)低(直接复用)

 

二、核心用法详解

1. 基础用法:动态组件缓存

<template><keep-alive><component :is="currentTab" /></keep-alive>
</template><script>
export default {data() {return {currentTab: 'Home'}},components: {Home, About}
}
</script>

 

  • 效果:当currentTabHomeAbout之间切换时,组件实例会被缓存,状态不会丢失。

2. 路由视图缓存 

<template><keep-alive><router-view /></keep-alive>
</template>
  • 适用场景:缓存路由组件(如商品列表页、用户主页等),返回时无需重新加载数据。

3. 生命周期钩子

keep-alive包裹的组件会触发两个特殊钩子:

export default {activated() {console.log('组件被激活');// 重新获取数据或恢复定时器},deactivated() {console.log('组件被缓存');// 清除定时器或取消事件监听}
}

 

  • 注意created/mounted等常规钩子仅在首次加载时调用一次。

 

三、进阶配置与优化

1. 精准控制缓存组件

(1)include/exclude属性
<!-- 只缓存Home和About组件 -->
<keep-alive :include="['Home', 'About']"><router-view />
</keep-alive><!-- 排除User组件不缓存 -->
<keep-alive exclude="User"><router-view />
</keep-alive>

 

  • 支持格式:字符串、正则表达式、数组
  • 规则:组件需定义name属性才能被匹配
(2)max属性限制缓存数量
<!-- 最多缓存3个组件实例 -->
<keep-alive :max="3"><router-view />
</keep-alive>
  • 底层机制:基于LRU(最近最少使用)算法,当缓存超过max时自动淘汰最久未使用的组件。

 

四、实战场景与案例

1. 表单数据保存

需求:用户填写表单后切出页面,返回时数据仍在。

<template><keep-alive><form-component /></keep-alive>
</template>

 

  • 优势:避免用户重复输入,提升体验。

2. 标签页切换优化

<template><div><button @click="currentTab = 'TabA'">Tab A</button><button @click="currentTab = 'TabB'">Tab B</button><keep-alive><component :is="currentTab" /></keep-alive></div>
</template>
  • 效果:TabA和TabB切换时,组件状态(如表格滚动位置)会被保留。

3. 动态控制缓存

<template><keep-alive><component-a v-if="showA" /><component-b v-if="!showA" /></keep-alive>
</template>
  • 场景:根据条件动态切换组件,同时保持缓存。

 

五、避坑指南

1. 组件必须定义name属性

export default {name: 'Home', // 必须定义// ...
}
  • 原因include/exclude依赖组件的name进行匹配。

2. 避免过度缓存

  • 问题:缓存过多组件会占用大量内存,尤其在移动端需谨慎使用。
  • 解决方案:合理设置max值,或通过exclude排除非必要组件。

3. 相同路由不同参数导致缓存失效

<keep-alive><router-view :key="$route.fullPath" />
</keep-alive>

 

  • 原因:默认情况下,<keep-alive>会缓存相同组件的不同参数实例。
  • 解决方案:通过key强制区分不同路由参数。

六、性能优化建议

  1. 按需缓存:仅对需要保留状态的组件使用keep-alive
  2. 主动清理资源:在deactivated钩子中清除定时器、事件监听等。
  3. 结合路由元信息:动态控制是否缓存特定路由。
    // router.js
    {path: '/dashboard',component: Dashboard,meta: { keepAlive: true }
    }// App.vue
    <keep-alive><router-view v-if="$route.meta.keepAlive" />
    </keep-alive>

七、总结

keep-alive是Vue2中优化组件性能的利器,通过缓存实例减少重复渲染,同时保留交互状态。合理使用include/excludemax属性,结合生命周期钩子,可以显著提升复杂应用的流畅度。在实际开发中,需根据场景权衡缓存策略,避免内存泄漏问题。

建议:对于高频切换的组件(如商品列表、表单页),优先使用keep-alive;对于一次性展示的组件(如登录页),则无需缓存。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87668.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87668.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87668.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护?

url: /posts/f96ba438de34dc197fd2598f91ae133d/ title: FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护? date: 2025-07-02T22:05:04+08:00 lastmod: 2025-07-02T22:05:04+08:00 author: cmdragon summary: FastAPI框架安全加固方案包括密钥轮换自动化、请…

NeighborGeo:基于邻居的IP地理定位(五)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 5. Case analysis 为了说明NeighborGeo在优化图结构和利用邻居信息进行预测方面的优势,将目标I…

Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动

Ethernet IP与Profinet共舞&#xff1a;驱动绿色工业的智慧脉动 光伏建筑一体化&#xff0c;建筑碳中和&#xff0c;在全球气候变化、国家碳达峰碳中和战略大背景下&#xff0c;敬畏生活、生产与自然和谐共处&#xff0c;确立自身资源循环高效利用的倒计时和路线图。 在全球气…

衡石科技破解指标管理技术难题:语义层建模如何实现业务与技术语言对齐?

在数字化转型的深水区&#xff0c;企业指标管理体系普遍面临一个核心矛盾&#xff1a;业务部门需要敏捷的数据洞察支撑决策&#xff0c;而IT部门却受困于复杂的数据架构和冗长的需求响应周期。这种矛盾的本质&#xff0c;是传统指标管理体系中“技术语言”与“业务语言”的割裂…

正品库拍照PWA应用的实现与性能优化|得物技术

一、 背景与难点 背景 目前得物ERP主要鉴别流程&#xff0c;是通过鉴别师鉴别提需到仓库&#xff0c;仓库库工去进行商品补图拍照&#xff0c;现有正品库59%的人力投入在线下商品借取/归还业务的操作端&#xff0c;目前&#xff0c;线下借取的方式会占用商品资源&#xff0c…

如何使用python识别出文件夹中全是图片合成的的PDF,并将其移动到指定文件夹

引言 在现代数字化工作流程中&#xff0c;无论是为机器学习模型处理数据&#xff0c;还是进行数字归档&#xff0c;区分原生文本 PDF&#xff08;例如&#xff0c;由文字处理器生成的报告&#xff09;和基于图像的 PDF&#xff08;例如&#xff0c;扫描的发票、档案文件&#…

淘系怎么做?

首先&#xff0c;要明确一点就是&#xff0c;补单不是“刷/单”&#xff0c;补单是为了给买家营造一个良好的购物氛围&#xff0c;毕竟再好的产品没有排名、没有权重&#xff0c;买家根本都没有机会看到你的产品&#xff0c;而且只有让淘宝感觉的产品有扶持必要它才会给你对应的…

网安系列【6】之[特殊字符] SQL注入揭秘:从入门到防御实战指南

文章目录一 真实案例二 SQL注入三 为什么危害堪比核弹&#xff1f;四 深入解剖攻击原理&#x1f3af; 4.1&#xff1a;探测SQL漏洞的存在&#x1f3af; 4.2&#xff1a;数据库信息探测&#x1f3af; 4.3&#xff1a;数据库信息探测&#x1f3af; 4.4&#xff1a;数据库信息进一…

Windows内核并发优化

Windows内核并发优化通过多层次技术手段提升多核环境下的系统性能&#xff0c;以下是关键技术实现方案&#xff1a; 一、内核锁机制优化‌ 精细化锁策略‌ 采用自旋锁&#xff08;Spinlock&#xff09;替代信号量处理短临界区&#xff0c;减少线程切换开销 对共享资源实施读…

【数据结构】 排序算法

【数据结构】 排序算法 一、排序1.1 排序是什么&#xff1f;1.2 排序的应用1.3 常见排序算法二、常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序2.2 选择排序2.2.1 直接选择排序2.2.1.1 方法12.2.1.1 方法22.2.2 堆排序&#xff08;数组形式&#xff09;2.3 …

NumPy-核心函数np.matmul()深入解析

NumPy-核心函数np.matmul深入解析 一、矩阵乘法的本质与np.matmul()的设计目标1. 数学定义&#xff1a;从二维到多维的扩展2. 设计目标 二、np.matmul()核心语法与参数解析函数签名核心特性 三、多维场景下的核心运算逻辑1. 二维矩阵乘法&#xff1a;基础用法2. 一维向量与二维…

突破政务文档理解瓶颈:基于多模态大模型的智能解析系统详解

重磅推荐专栏&#xff1a; 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域&#xff0c;包括但不限于ChatGPT、DeepSeek、Stable Diffusion等。我们将深入研究大型模型的开发和应用&#xff0c;以及与之相关的人工智能生成内容…

深入探讨支持向量机(SVM)在乳腺癌X光片分类中的应用及实现

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

九、K8s污点和容忍

九、K8s污点和容忍 文章目录九、K8s污点和容忍1、污点&#xff08;Taint&#xff09;和容忍&#xff08;Toleration&#xff09;1.1 什么是污点&#xff08;Taint&#xff09;&#xff1f;1.2 什么是容忍&#xff08;Toleration&#xff09;&#xff1f;1.3 污点的影响效果&…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的超级文化符号构建路径研究

摘要&#xff1a;在数字技术重构文化传播生态的背景下&#xff0c;超级文化符号的塑造已突破传统IP运营框架。本文以开源AI智能名片链动21模式与S2B2C商城小程序的融合创新为切入点&#xff0c;结合"屿光生活"体验馆、快手烧烤摊主等典型案例&#xff0c;提出"技…

QT 日志 - qInstallMessageHandler将qDebug()打印内容输出到文件

在编程开发中&#xff0c;日志功能至关重要&#xff0c;对于在开发期间或者是程序上线后&#xff0c;都有助于排查问题&#xff1b; 对于C/C和QT方向&#xff0c;日志库有log4cpp、plog、log4qt等&#xff0c;本篇文章将使用qt自带的日志方式去实现。 定义日志函数&#xff1a…

记录一下seata启动403问题

1.现象&#xff1a;启动报错可能是403&#xff0c;或是是密码错误一般是nacos加了认证&#xff0c;seata配置nacos账号密码的时候就启动不了。可能是密码错误&#xff0c;最有可能是seata版本太低导致的。1.4.2以及一下的版本应该都有这个问题2.问题密码不能有特殊符号如&#…

【STM32实践篇】:GPIO 详解

文章目录GPIO 基本结构GPIO 工作模式GPIO 基本结构 右边的红框是I/O引脚&#xff0c;这个I/O引脚就是我们可以看到的芯片实物的引脚&#xff0c;其他部分都是GPIO的内部结构。 保护二极管 上方二极管用于防过压保护&#xff0c;当I/O引脚电压高于 V_DD 二极管导通压降​时&…

#include

关于 C 中的 include <>和 include “” 这两种形式&#xff0c;区别其实是关于“搜索路径”和“优先级”的。让我详细为你讲解。 1. 简单区别总结 #include <header>&#xff1a;告诉编译器去“系统标准目录”或“预定义的标准路径”中查找头文件&#xff08;比如…

永磁同步电机参数辨识算法--带遗忘因子的递推最小二乘法辨识

一、原理介绍之前已经介绍了递推最小二乘法进行电气参数辨识&#xff0c;在实时参数辨识中&#xff0c;协方差矩阵P和增益矩阵K是用于更新参数估计的重要工具&#xff0c;而系统参数变化时&#xff0c;P、K矩阵会逐渐减小&#xff0c;导致数据饱和。数据饱和与参数迟滞是实时参…