keep-alive 的应用

34 篇文章 5 订阅

keep-alive可以在组件切换时,保存其包裹的组件的状态,使其不被销毁,防止多次渲染。其拥有两个独立的生命周期钩子函数 actived 和 deactived,使用keep-alive包裹的组件在切换时不会被销毁,而是缓存到内存中并执行 deactived 钩子函数,命中缓存渲染后会执行 actived 钩子函数。

keep-alive生命周期

生命周期执行顺序:
  1、不使用keep-alive的情况:beforeRouteEnter --> created --> mounted --> destroyed
  2、使用keep-alive的情况:beforeRouteEnter --> created --> mounted --> activated --> deactivated
  3、使用keep-alive,并且再次进入了缓存页面的情况:beforeRouteEnter -->activated --> deactivated

被keep-alive包裹住的页面都会被缓存,如果想刷新部分内容要启用activated函数,用法同created,activated只有在被keep-alive包裹时会触发,activated函数一进入页面就触发

props

  • include - 字符串或正则表达,只有匹配的组件会被缓存
  • exclude - 字符串或正则表达式,任何匹配的组件都不会被缓存
// 组件 a
export default {
  name: 'a',
  data () {
    return {}
  }
}
<keep-alive include="a">
  <component>
    <!-- name 为 a 的组件将被缓存! -->
  </component>
</keep-alive>可以保留它的状态或避免重新渲染
<keep-alive exclude="a">
  <component>
    <!-- 除了 name 为 a 的组件都将被缓存! -->
  </component>
</keep-alive>可以保留它的状态或避免重新渲染

但实际项目中,需要配合vue-router共同使用

App.vue

<template>
  <div id="app">
    <!-- 路由占位符 -->
    <!-- <router-view></router-view> -->
    <keep-alive>
      <router-view v-if="$route.meta.keepAlive">
        <!-- 这里是会被缓存的视图组件 -->
      </router-view>
    </keep-alive>

    <router-view v-if="!$route.meta.keepAlive">
      <!-- 这里是不被缓存的视图组件 -->
    </router-view>
  </div>
</template>

router -> index.js

const routes = [
  { path: '/', redirect: '/index' },
  { path: '/', redirect: '/home' },
  {
    path: '/home',
    component: HomeLayout,
    children: [
      {
        path: '/home',
        component: Home
      },
      {
        path: '/workingCondition',
        component: () =>
          import(
            /*webpackChunkName:"workingCondition"*/ '../views/workingCondition/index.vue'
          ),
        meta: {
          keepAlive: true // 需要被缓存
        }
      }
    ]
  },
  {
    path: '/reportView',
    component: () => import('../views/other/reportView.vue')
  },
  {
    path: '/todo',
    component: () => import(/*webpackChunkName:"ToDo"*/ '../views/ToDo.vue'),
    meta: {
      keepAlive: true // 需要被缓存
    }
  }
]

参考:vue中keep-alive的使用及详解_半度℃温热-CSDN博客_keep-alive

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TCP Keep-alive是一种机制,用于检测并恢复网络连接存在的故障情况。当两个系统之间的网络连接长时间没有数据交换,TCP协议可能会认为该连接已断开,并关闭连接以防资源浪费。然而,在某些情况下,如Web服务器、长连接应用等,连接应该保持开放状态而不仅仅是因为无活动就关闭。 ### TCP Keep-alive的工作原理 TCP Keep-alive通过发送空的数据包来检查连接的状态。发送间隔由`TIME_WAIT`定时器控制,默认设置下这个间隔大约为7200秒(两小时)。如果在这个时间周期内接收端没有接收到任何来自对端的数据包,那么接收端会自动向源端发送一个ICMP消息,提示对方其连接已经超时。同时,接收端将更新其本地的超时计数器,准备在未来的时间周期再次尝试连通。 ### 实现TCP Keep-alive的方式 #### 服务器端: 对于服务器端,通常不需要显式配置TCP Keep-alive,因为在Linux和其他Unix系统上默认已经启用了此功能。但为了确保TCP Keep-alive能正常工作,可以调整相关的设置,例如增加`TIME_WAIT`超时时间或者更改接收数据的等待时间。 #### 客户端: 客户端需要更直接地与服务器协商开启TCP Keep-alive。这通常在建立连接的握手过程进行,可以通过HTTP请求头或者其他特定于应用层的消息来实现。例如,在HTTP协议,可以使用特定的HTTP版本或者自定义头部信息来触发Keep-alive机制。 ### 应用场景 TCP Keep-alive特别适用于需要长时间保持连接的应用,比如Web服务、文件传输协议(FTP)、远程桌面协议(RDP)以及其他任何依赖于持续连接的应用程序。它有助于提高系统的整体可用性和用户体验,避免因偶然的网络波动导致的意外断开连接。 ### 相关问题: 1. **TCP Keep-alive的配置方法是什么?** - 对于服务器,可以在运行时通过命令行参数或者配置文件来调整`TIME_WAIT`超时时间; - 对于客户端,需要根据使用应用程序或协议文档来了解如何启用或配置TCP Keep-alive。 2. **TCP Keep-alive在哪些情况下可能导致问题?** - 过短的`TIME_WAIT`超时时间可能会导致频繁的连接尝试; - 过长的超时时间则可能影响资源占用以及系统的响应速度。 3. **是否所有的网络环境下都适合使用TCP Keep-alive?** - 不一定。在高带宽、低延迟环境,TCP Keep-alive可能是有益的;但在流量密集型网络或者对网络资源非常敏感的情况下,过多的Keep-alive操作可能会带来额外的网络负担。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值