Keep-alive 概念 原理 使用方法

概念

  1. keep-alive 是 Vue 的内置组件,当它包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 transition 相似,keep-alive 是一个抽象组件:它自身不会渲染成一个 DOM 元素,也不会出现在父组件链中。

作用

  1. 在组件切换过程中将状态保留在内存中,防止重复渲染DOM,减少加载时间及性能消耗,提高用户体验性

原理

  1. 在 created 函数调用时将需要缓存的 VNode 节点保存在 this.cache 中/在 render(页面渲染) 时,如果 VNode 的 name 符合缓存条件(可以用 include 以及 exclude 控制),则会从 this.cache 中取出之前缓存的 VNode 实例进行渲染。VNode:虚拟DOM,其实就是一个JS对象

生命周期函数

  1. activated, keep-alive组件激活时调用
  2. deactivated, keep-alive组件停用时调用
  3. 使用 keep-alive 会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在 activated 阶段获取数据,承担原来 created 钩子函数中获取数据的任务。

生命周期

  1. 初次进入时:created > mounted > activated;退出后触发 deactivated
  2. 再次进入:会触发 activated;事件挂载的方法等,只执行一次的放在 mounted 中;组件每次进去执行的方法放在 activated 中

具体用法

  1. 缓存所有页面
  2. <keep-alive> <router-view/> </keep-alive>

根据条件缓存页面

<keep-alive include='test'>
      <router-view/>
    </keep-alive>
	
	// 2. 将缓存 name 为 a 或者 b 的组件,结合动态组件使用
	<keep-alive include='a,b'>
  	  <router-view/>
	</keep-alive>
	
	// 3. 使用正则表达式,需使用 v-bind
	<keep-alive :include='/a|b/'>
  	  <router-view/>
	</keep-alive>	
	
	// 5.动态判断
	<keep-alive :include='includedComponents'>
  	  <router-view/>
	</keep-alive>
	
	// 5. 将不缓存 name 为 test 的组件
	<keep-alive exclude='test'>
  	  <router-view/>
	</keep-alive>

结合Router,缓存部分页面

给路由规则添加meta规则
meta: {
    keepAlive: false/true
}

在App.vue里面
<keep-alive>
	<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
### HTTP Keep-Alive 的工作机制及实现原理 HTTP Keep-Alive 是一种用于提高网络通信效率的技术,它允许在一个 TCP 连接上复用多个 HTTP 请求和响应,从而减少频繁建立和关闭连接带来的开销。以下是其工作机制及实现原理: #### 1. **基本概念** HTTP 协议默认情况下采用的是短连接模式,即每次请求都需要经历三次握手建立连接以及四次挥手断开连接的过程。这种模式在高频率的小数据量交互场景下会产生较大的性能损耗。而 HTTP Keep-Alive 则通过保持连接的状态,允许多个请求共享同一个 TCP 连接。 这一特性显著减少了因重复创建和销毁连接而导致的时间延迟和资源消耗[^1]。 #### 2. **协议支持** 为了启用 HTTP Keep-Alive 功能,客户端和服务端需要显式声明对该特性的支持。具体来说: - 在 HTTP/1.0 中,需手动设置 `Connection: keep-alive` 头部字段; - 而在 HTTP/1.1 中,默认启用了持久化连接功能(除非明确指定 `Connection: close`),因此无需额外配置即可享受 Keep-Alive 带来的优势。 #### 3. **超时管理** 尽管 HTTP Keep-Alive 提倡长时间维持连接状态,但由于服务器资源有限,不可能无限期地保留未使用的连接。为此,服务端通常会对空闲时间超过一定阈值的连接执行自动关闭操作。这个超时期限由具体的 Web 服务器决定,并可通过相应的参数调整。 #### 4. **技术细节** 当浏览器发起一系列连续的 HTTP 请求时,如果前一次请求已经建立了有效的 TCP 链路,则后续请求可以直接利用这条链路上发送数据包,而不必再次经过完整的 TCP 握手流程。这不仅加快了整体传输速度,还降低了带宽占用率。 ```python import requests headers = {'Connection': 'keep-alive'} response = requests.get('https://example.com', headers=headers) print(response.headers['Connection']) # 输出可能为'keep-alive' ``` 上述代码片段展示了如何向目标站点发出带有 `Connection: keep-alive` 标记的 GET 请求。注意实际效果取决于远程主机是否接受此类指令。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值