Vue中Keep-Alive缓存组件使用语法及深度解析

Vue Keep-Alive 缓存策略与LRU算法深度解析 本文深入解析Vue Keep-Alive的缓存策略与LRU算法实现原理,探讨如何通过组件缓存提升页面性能。文章详细介绍了Keep-Alive的核心工作机制、LRU算法的精妙设计,以及高级优化实践,帮助开发者合理使用缓存策略,避免内存泄漏,提升用户体验。 阅读详情

一、Keep-alive 是什么

keep-alive是vue中的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM

keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们

keep-alive可以设置以下props属性:

  • include - 字符串或正则表达式。只有名称匹配的组件会被缓存
  • exclude - 字符串或正则表达式。任何名称匹配的组件都不会被缓存
  • max - 数字。最多可以缓存多少组件实例

关于keep-alive的基本用法:

<keep-alive>
  <component :is="view"></component>
</keep-alive>

使用includes和exclude:

<keep-alive include="a,b">
  <component :is="view"></component>
</keep-alive>

<!-- 正则表达式 (使用 `v-bind`) -->
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

<!-- 数组 (使用 `v-bind`) -->
<keep-alive :include="['a', 'b']">
  <component :is="view"></component>
</keep-alive>

匹配首先检查组件自身的 name 选项,如果 name 选项不可用,则匹配它的局部注册名称 (父组件 components 选项的键值),匿名组件不能被匹配

设置了 keep-alive 缓存的组件,会多出两个生命周期钩子(activated与deactivated):

  • 首次进入组件时:beforeRouteEnter > beforeCreate > created > mounted > activated > … … > beforeRouteLeave > deactivated
  • 再次进入组件时:beforeRouteEnter > activated > … … > beforeRouteLeave > deactivated
export default {
    activated() {
        // 组件被激活时执行的逻辑
    },
    deactivated() {
        // 组件被停用时执行的逻辑
    }
}

 

二、使用场景

使用原则:当我们在某些场景下不需要让页面重新加载时我们可以使用keepalive

举个栗子:

当我们从 首页 –> 列表页 –> 商详页 –> 再返回,这时候列表页应该是需要keep-alive

从 首页 –> 列表页 –> 商详页 –> 返回到列表页(需要缓存) –> 返回到首页(需要缓存) –> 再次进入列表页(不需要缓存),这时候可以按需来控制页面的keep-alive

在路由中设置keepAlive属性判断是否需要缓存

{
  path: 'list',
  name: 'itemList', // 列表页
  component (resolve) {
    require(['@/pages/item/list'], resolve)
 },
 meta: {
  keepAlive: true,
  title: '列表页'
 }
}

使用<keep-alive>

<div id="app" class='wrapper'>
    <keep-alive>
        <!-- 需要缓存的视图组件 --> 
        <router-view v-if="$route.meta.keepAlive"></router-view>
     </keep-alive>
      <!-- 不需要缓存的视图组件 -->
     <router-view v-if="!$route.meta.keepAlive"></router-view>
</div>

三、思考题:缓存后如何获取数据

解决方案可以有以下两种:

  • beforeRouteEnter

  • actived

beforeRouteEnter

每次组件渲染的时候,都会执行beforeRouteEnter

beforeRouteEnter(to, from, next){
    next(vm=>{
        console.log(vm)
        // 每次进入路由执行
        vm.getData()  // 获取数据
    })
},

actived

在keep-alive缓存的组件被激活的时候,都会执行actived钩子

activated(){
   this.getData() // 获取数据
},
注意:服务器端渲染期间avtived不被调用。
【vue3】vue3的keep-alive(keepAlive)失效排查与正确配置指南 本文详细解析了Vue3中keep-alive失效的常见原因及正确配置方法,包括组件缺少name属性、include/exclude配置错误以及与router-view的错误组合等场景。通过实战案例和性能优化技巧,帮助开发者掌握keep-alive的高级用法,如动态缓存、max属性配置等,提升Vue3应用性能。 阅读详情

相关推荐

vue中keep-alive的用法及问题描述

主要介绍了vue中keep-alive的用法及问题描述,本文给大家介绍的非常详细,具有一定的参考解决价值,需要的朋友可以参考下

Vue中 keep-alive 详解

1. 简介 keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。 和 transition 相似,keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。 作用: 在组件切换过程中将状态保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性。 原理: 在 created 函数调用时将需要缓存的 VNode 节点保存在 this.cache 中/在 render(页面渲染) 时,如果 VNode

明天也要努力的博客 6万+

告别繁琐同步:Zotero与Obsidian双向联动新方案(基于Better BibTeX与MarkDBConnect)

本文详细介绍了一套基于Better BibTeX、Bibnotes Formatter和MarkDBConnect插件的Zotero与Obsidian双向联动方案。该方案通过建立智能数据通道,实现文献信息的自动同步与笔记的增量更新,解决了手动同步的繁琐问题,并支持在两大工具间无缝跳转,极大提升了科研和知识管理的工作效率。

weixin_29213827的博客 644

Vue Keep-alive使用

由于组件不支持v-if指令,所以我们在App.vue中采用两个的写法,通过当前路由的keepAlive字段来判断是否对页面进行缓存。假如有这样一个场景:我们当前所处在A组件,当我们跳转到B组件时(A组件被销毁,B组件被创建)当组件缓存之后,其他的生命周期不会走,但这个每次进去组件都触发,相当于。当组件缓存之后,其他的生命周期不会走,但这个每次离开组件都触发,相当于。但是,当我们又从B组件回到A组件时(B组件被销毁,A组件被创建。

coldriversnow的专栏 2986

OFDM接收机同步——分组检测

上一篇讲了OFDM发射机中的长短训练序列生成原理,基于此可以得到长短训练序列的准确数值,为接收机中的符号同步中的相关运算提供基础。 进入符号同步前,首先来看OFDM接收机中的第一步——分组检测。分组检测就是检测突发传输方式的信道上是否有新的数据到达,算法的好坏直接影响着接收机的后续工作性能。 一、本文意义 基于《基于xilinx fpga 的ofdm的通信系统基带设计》这本教材中分组检测算法原理,通过matlab编程仿真验证“延时相关+保持长度”分组检测算法的有效性。同时,通过仿真证明教材上的判决公式的问题

boayel的博客 2202

SAP批量程序(一)-静态批量EX,FX和期间批量MB,WB和TB

SAP批量程序(一)-静态批量和区间批量

weixin_38974136的博客 5481

vue中的keep-alive详解与应用场景

vue中的keep-alive详解与应用场景

唯见青山不见君 7803

基于ESP32的智能停车场管理系统开发

智能停车场管理系统通过引入物联网(IoT)技术,实现对停车场内车辆的实时监控、空闲车位的管理、车辆的入场与出场控制等功能,大大提高了停车场的利用率和管理效率。通过集成物联网技术、云平台以及先进的传感器和执行器,系统不仅能实时监控停车场的车位状态,还能提供更好的用户体验。本文将介绍如何基于ESP32开发一个智能停车场管理系统,涵盖系统架构、硬件选择、软件开发以及最新技术的应用,帮助开发者实现高效的智能停车管理。ESP32的代码主要负责处理车位传感器的数据,控制LED指示灯的状态,以及与云平台进行数据交互。

2201_76125393的博客 914

vue中keep-alive的使用及详解

概念     keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 transition 相似,keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。 作用     在组件切换过程中将状态保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性 原理     在 created 函数...

关注最新技术问题并持续维护更新 12万+

使用 Simulink 实现基于相控阵雷达的波束形成技术

摘要:本文详细介绍了利用MATLAB Simulink和Phased Array System工具箱实现相控阵雷达波束形成的完整流程。主要内容包括:1)创建Simulink模型;2)设计天线阵列参数;3)信号生成模块配置;4)波束形成算法实现;5)结果可视化方法;6)仿真调试与优化;7)代码导出与部署。通过分步指导,读者可以掌握从理论到实践的完整开发流程,包括关键参数设置和算法实现示例。该方案适用于军事、气象等领域的雷达系统开发,并支持后续嵌入式和智能算法集成。

xiaoheshang_123的博客 182

华为OD面试手撕真题目录

2026最新华为OD面试手撕真题 , 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解.

qq_45776114的博客 1万+

Vue 中 keep-alive 组件的原理与实践详解

keep-alive的本质是基于 VNode 的缓存管理组件抽象组件特性:通过实现自身不渲染,仅作为缓存容器缓存存储结构:用cache对象存储 VNode,keys数组维护访问顺序LRU 置换算法:超过max时删除keys数组头部(最久未访问)的缓存项渲染优化逻辑:复用缓存的 VNode 和组件实例,跳过初始化和 diff 过程,直接插入真实 DOM动态缓存控制:通过监听includeexclude变化,实时清理无效缓存合理使用keep-alive。

zhang1339435196的博客 1066

GeoXCP:可解释人工智能中空间解释的不确定性量化

GeoXCP: uncertainty quantification of spatial explanations in explainable AI提出基于保形预测(conformal prediction)的不确定性量化框架——地理空间解释保形预测(GeoXCP),将空间依赖纳入建模过程,生成具有校准不确定性估计的空间自适应解释。通过大量模拟实验和真实世界数据集验证,GeoXCP在不同地理空间场景中能提供可靠解释并有效量化不确定性,推动可解释地理空间机器学习的发展,帮助决策者评估模型驱动洞察的可信度。

May the Force be with you 243

【Vue3】Keep-Alive 深度解析

本文深入解析了Vue3中Keep-Alive组件的用法与实现原理。首先介绍了基本语法、条件缓存、最大缓存数量等常见用法。然后详细剖析了其设计原理,包括缓存机制和特殊生命周期钩子。核心部分通过源码分析Keep-Alive的底层实现,展示了缓存数据结构、VNode缓存策略和LRU淘汰算法等关键实现细节。文章还探讨了VNode缓存策略和组件激活/停用机制,帮助开发者深入理解Keep-Alive的工作原理,为优化Vue应用性能提供技术基础。

qq_38161537的博客 1071

6、深入解析Microsoft 365核心服务对比与迁移策略

本文深入解析了Microsoft 365的核心服务,包括身份和设备管理、现代设备配置体验、Exchange和SharePoint的迁移策略以及Microsoft Teams的协作功能。同时探讨了迁移过程中需要考虑的安全控制措施,为组织规划和实施云迁移项目提供了全面的指导和建议。

k8s6orchestrator的博客 109

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Vue 3 Keep-Alive 深度实践:从原理到最佳实践

本文深入探讨了Vue 3中Keep-Alive组件的使用原理与最佳实践。Keep-Alive通过缓存组件实例来优化用户体验,避免重复创建销毁组件,保留状态和滚动位置。文章从基础使用、Vue Router集成到常见问题解决方案展开,重点分析了include/exclude属性基于组件name的匹配机制及其潜在问题。针对命名冲突和缓存控制难题,提出了基于路由meta的解决方案,通过动态判断路由元信息来决定是否启用缓存。同时介绍了生命周期钩子(activated/deactivated)在状态管理中的应用,为开发

tuse101的博客 1440

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2024年最全vue组件缓存之keep-alive正确使用姿势_keepalive缓存组件,java基础面试题

全网独播-价值千万金融项目前端架构实战从两道网易面试题-分析JavaScript底层机制RESTful架构在Nodejs下的最佳实践开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】一线互联网企业如何初始化项目-做一个自己的vue-cli思维无价,看我用Nodejs实现MVC代码优雅的秘诀-用观察者模式深度解耦模块前端高级实战,如何封装属于自己的JS库VUE组件库级组件封装-高复用弹窗组件。

2401_84435942的博客 1410

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Vue中使用keep-alive实现页面前进刷新、后退缓存的完整方案

本文介绍Vue中使用keep-alive实现"前进刷新、后退缓存"的完整方案。核心原理是利用keep-alive组件缓存路由组件,结合路由元信息(keepAlive、useCache、isBack)控制缓存策略。实现要点包括:1)在路由守卫中判断前进/后退操作;2)动态清除或保留缓存;3)记录和恢复滚动位置。文章提供了完整的代码示例,涵盖路由配置、组件实现和全局守卫,同时给出性能优化技巧和常见问题解决方案,如缓存失效处理、内存泄漏预防等,帮助开发者构建更流畅的Vue单页应用体验。

1102

keep-alive 组件实现原理

本文深入解析Vue3中keep-alive组件的实现原理。keep-alive是一个抽象组件,通过Map缓存组件实例,采用LRU策略管理缓存大小。它支持include/exclude属性控制缓存范围,在组件切换时触发activated/deactivated生命周期钩子。核心实现包括缓存管理、实例复用、组件激活/停用机制,能有效提升动态组件切换的性能表现,特别适合需要保留组件状态的场景。

寒露丶小白 921

Vue.js 终极指南:keep-alive 缓存机制与激活策略深度解析

在 Vue.js 开发中,`<keep-alive>` 是提升性能的关键组件,它通过缓存不活动的组件实例来减少重复渲染,显著优化用户体验。本文将系统讲解其实现原理、使用技巧及最佳实践,帮助开发者充分发挥其缓存能力。 ## 什么是 keep-alive? `<keep-alive>` 是 Vue.js 内置的抽象组件,专门用于缓存组件实例。与普通组件不同,它不会出现在 DOM 树中,而是通过 `

gitblog_00429的博客 969

vue keep-alive 总结

1. keep-alive是什么 keep-alive用来缓存组件,避免多次加载相应的组件,减少性能消耗,简单一点来说就是从页面1链接到其他页面后回退到页面1不用在重新执行页面1的代码,只会从缓存中加载之前已经缓存的页面1,这样可以减少加载时间及性能消耗,提高用户体验性。 2. keep-alive作用是什么 keep-alive 可以在组件切换时保存所包裹的组件的状态,使其在切换组件的时候不会被销毁,并防止多次被重复渲染。其拥有两个独立的钩子函数 actived 和 deactived,使用keep-a

weixin_45817109的博客 396

Vue3路由缓存避坑指南:如何用keep-alive和路由元信息优化你的SPA性能

本文深入探讨Vue3路由缓存的优化策略,重点解析keep-alive与路由元信息的动态控制机制。通过实战案例展示如何避免内存泄漏、状态错乱等问题,提供包括缓存污染排查、内存泄漏防护、数据更新策略在内的高效解决方案,帮助开发者显著提升SPA应用性能。

xray4的博客 842

专家视角:深入解析 iframe 在 keep-alive 中的缓存失效问题

完美解决 iframe 在 keep-alive 中的缓存失效问题保持了普通组件的标准 keep-alive 缓存机制实现简单,代码侵入性小充分利用 Vue3 的组合式 API 特性。

weixin_38764750的博客 1170

[特殊字符] Vue 3 中 Keep-Alive 对生命周期的影响:深度解析

是 Vue 内置的一个抽象组件,它不会渲染成 DOM 元素,也不会出现在父组件链中。它的作用:缓存不活动的组件实例,而不是销毁它们。当组件再次被切换回来时,直接从缓存中读取,跳过创建和挂载过程。标签页切换(如:首页、列表页、详情页)。表单填写中途切换,希望保留用户输入的内容。<template>特性普通组件Keep-Alive 组件创建/挂载每次切换都执行仅首次执行销毁/卸载每次切换都执行仅最终移除时执行激活/停用无状态保留不保留保留。

weixin_64684095的博客 513

Vue 使用 <keep-alive include> 实现多级 <router-view> 缓存,无限层次缓存_keepalive include(1)

全网独播-价值千万金融项目前端架构实战从两道网易面试题-分析JavaScript底层机制RESTful架构在Nodejs下的最佳实践开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】一线互联网企业如何初始化项目-做一个自己的vue-cli思维无价,看我用Nodejs实现MVC代码优雅的秘诀-用观察者模式深度解耦模块前端高级实战,如何封装属于自己的JS库VUE组件库级组件封装-高复用弹窗组件VUE组件库级组件封装-高复用弹窗组件。

2401_84418883的博客 870

Vue 3 keep-alive 缓存失效排查与实战指南

组件缓存是前端性能优化与提升用户体验的核心技术之一,其原理在于通过保留组件实例,避免重复渲染带来的性能开销与状态丢失。在Vue.js生态中,内置的keep-alive组件是实现这一机制的关键。然而,随着Vue 3组合式API的普及,许多开发者在实际应用中发现缓存机制并未按预期工作,导致页面状态丢失、用户体验受损。本文将从Vue 3的组件定义、路由配置、生命周期钩子等基础概念切入,深入剖析keep-alive在Vue 3中失效的五大常见原因,例如组件名称缺失、路由实例复用等。通过结合后台管理系统、移动端H5等

weixin_33831673的博客 455
上一篇: vue 中插槽(slot)用法
下一篇: 微信小程序授权获取用户手机号
核动力驴_
博客等级 码龄5年 54粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值