当前位置: 首页 > news >正文

如何用keepAlive实现标签页缓存

什么是KeepAlive

        首先,要明确所说的是TCP的 KeepAlive 还是HTTP的 Keep-Alive。

        TCP的KeepAlive和HTTP的Keep-Alive是完全不同的概念,不能混为一谈。

        实际上HTTP的KeepAlive写法是Keep-Alive,跟TCP的KeepAlive写法上也有不同。

TCP的KeepAlive

        TCP的KeepAlive是侧重在保持客户端和服务端的连接,一方会不定期发送心跳包给另一方,当有一方断掉的时候,没有断掉的定时发送几次心跳包,如果间隔发送几次,对方都返回的是RST(Reset),而不是ACK,那么就释放当前连接。

🔑 核心机制:定时发送探测包(心跳包),检测连接是否仍然有效。

举例:

客户端突然断网了,但服务端不知道:

        没有 TCP Keepalive:服务端会一直保留这个连接,直到程序主动读写失败,如果保持连接的状态几天,几个月,这对服务器资源的影响是很大的。

        有 TCP Keepalive:服务端会在一段时间后探测失败,主动关闭连接,释放资源。

HTTP的keep-Alive

        普通的 HTTP 连接是客户端连接上服务端,等结束请求后,由客户端或服务端进行HTTP连接的关闭。下次再发送请求时,客户端再发起连接,传送数据,关闭连接。如此流程反复。

        但是一旦客户端发送 connection:keep-alive 头给服务端,且服务端也接受这个 keep-alive 的话,这个连接就可以复用了,一个 HTTP 处理完之后,另外一个 HTTP 数据直接从这个连接走了,减少新建和断开TCP连接的消耗。

🔑 核心机制:复用已有TCP连接,减少TCP连接的建立与断开。

举例:

你访问一个网页,里面有 10 张图片:

        没有 Keep-Alive:建立 11 次 TCP 连接(1 次 HTML + 10 次图片)

        有 Keep-Alive:可能只建立 1 次 TCP 连接,复用 10 次请求

二者对比

        注意不要混为一谈,HTTP 的 Keep-Alive 和 TCP 的 keepalive 没有直接依赖关系

        TCP 的 KeepAlive 意图在于检测连接是否存活(保活),属于传输层。

        HTTP Keep-Alive 的意图在于短时间内保持连接复用,减少TCP 连接建立和关闭的开销,提高性能,属于应用层。

举例:

        HTTP Keep-Alive:就像你用水管洗车,洗完一辆车后,不马上关水龙头,等下一辆车来的时候继续用,省得每次开关水龙头。

        TCP Keepalive:就像你家里没人,但水龙头一直开着,水管公司(操作系统)过几个小时来看看有没有人用水,没人用水就关掉水管。

       

Vue中的KeepAlive

        vue可以通过 <keep-alive>包裹组件,实现缓存,下次使用时不需要重新创建该组件。

        实现切换(后退)不刷新主要依据keep-alive组件的 activated 和 deactivated这两个生命周期钩子函数。

vue钩子函数的执行顺序

不使用keep-alive

        beforeRouteEnter → created → mounted → destroyed

使用keep-alive

        初次进入页面,beforeRouteEnter → created → mounted → activateddeactivated        

        再次进入缓存的页面,只会触发beforeRouteEnter → activateddeactivatedcreated和mounted不会再执行

        activated 在 keep-alive 组件激活时调用,deActivated 在 keep-alive 组件失活时调用。

问题

        存在一个问题:keep-alive包裹的组件中有滚动元素时,是不会存储页面滚动位置的,若需要存储滚动位置,需要自行记录页面的滚动位置,并在activated时赋值。 

http://www.dtcms.com/a/292468.html

相关文章:

  • Samba 共享解决方案:微服务多机共享 `/app` 目录
  • Hugging Face 模型的缓存和直接下载有什么区别?
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-微博基本信息实现
  • 程序代码篇---PID简介
  • 《计算机“十万个为什么”》之 MQ
  • 卷积神经网络:LeNet模型
  • STM32-GPIO理论部分1
  • 如何将iPad中的视频传输到电脑(6种简单方法)
  • 如何构建FunASR的本地语音识别服务
  • 出货奥地利,稳石氢能AEM氢户储应用方案撬动欧洲市场。
  • 智能文本抽取在法院卷宗管理的技术实现及优势
  • 记录解决问题--使用maven help插件一次性上传所有依赖到离线环境,spring-boot-starter-undertow离线环境缺少依赖
  • windows下nvm的安装及使用
  • 清华大学顶刊发表|破解无人机抓取与投递难题
  • 2025年COR SCI2区,基于多种配送模式的无人机自主配送车辆路径问题,深度解析+性能实测
  • 无人机吊舱与遥控器匹配技术解析
  • 【matlab】无人机控制算法开发与应用流程
  • 从差异到协同:OKR 与 KPI 的管理逻辑,Moka 让适配更简单
  • 进程优先级切换调度-进程概念(6)
  • Linux笔记1——简介安装
  • 高可用架构模式——数据集群和数据分区
  • Kafka监控体系搭建:基于Prometheus+JMX+Grafana的全方位性能观测方案
  • -----------------------------------事务--------------------------
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人
  • 风能革新!5大理由选Canopen转Profinet网关
  • 基于python django深度学习的中文文本检测+识别,可以前端上传图片和后台管理图片
  • Oracle使用小计
  • VUE2 项目学习笔记 ? 语法 v-if/v-show
  • C# 11.0 新特性 u8 后缀
  • 【数学建模|Matlab】Matlab「基础知识」和「基础操作」