缓存组件

一、keep-Alive搭配vue-router实现缓存页面效果

1.1 keep-alive
  • <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。
  • <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。
  • <keep-alive><transition>相似,只是一个抽象组件,它不会在DOM树中渲染(真实或者虚拟都不会),也不在父组件链中存在,比如:你永远在 this.$parent 中找不到 keep-alive
1.2 使用

给router-view添加keep-alive

<div id="app">
    <keep-alive>
        <router-view v-if="$route.meta.keepAlive"></router-view>
    </keep-alive>
    <router-view v-if="!$route.meta.keepAlive"></router-view>
</div>

router.js中添加meta

export default new Router({
    routes: [
        {
            path: '/a',
            name: 'A',
            component: A,
            meta: {
                keepAlive: false // 不需要缓存
            }
        },
        {
            path: '/b',
            name: 'B',
            component: B,
            meta: {
                keepAlive: true // 需要被缓存
            }
        }
    ]
})
1.3 缓存组件的生命周期函数

缓存组件第一次打开的时候,和普通组件一样,也需要执行created, mounted等函数。但是在被再次激活被停用时,这几个普通组件的生命周期函数都不会执行,会执行两个比较独特的生命周期函数。

  • activated
    这个会在缓存的组件重新激活时调用

  • deactivated
    这个会在缓存的组件停用时调用

如不需要缓存的组件(商品详情页vue单文件组件),http://localhost:8081/productDetails/1,如果缓存商品详情页的话,商品id一直都是第一次路由传递过来的,导致不论点击哪个商品,商品详情都一样。但是想要获取最新传过来的路由参数的话可以在activated中获取,在组件的其它生命周期中获取的路由参数都是第一次传递过来的

activated () {
	this.gameId = this.$route.params.gameId
}

组件停用时获取并存储当前scrollTop

经过测试,在 deactivated 方法里并不能准确的获取 scrollTop 值,每次都是 0

这里因为抽离了组件并且无法在 deactivated 中获取到scrollTop值,所以打算在点击商品跳转至商品详情页的点击事件中获取scrollTop值

goProductDetails (id) {
	this.$emit('getScrollTop', this.$parent.$refs.mescroll.scrollTop)
}
<hot-product @getScrollTop="getScrollTop" />
    
// 获取点击商品跳转至商品详情页时记录当前的位置
getScrollTop (val) {
	this.scroll = val
}

组件激活时取出并设置scrollTop

// 组件被激活时调用
activated () {
	this.$refs.mescroll.scrollTop = this.scroll
}

二、keep-Alive比较新而且简单的用法

直接缓存所有组件/路由

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

使用include来处理需要缓存的组件/路由

include有几种用法,可以是数组,字符串用标点隔开,也可以是正则,使用正则的时候需要使用v-bind来绑定。

<keep-alive include="['a','b']"> // 缓存name为a,b的组件
<keep-alive include ="a,b"> // 缓存name为a,b的组件
<keep-alive :include="/^store/"> // 缓存name以store开头的组件
  <router-view/>//可以为router-view
  <component :is="view"></component> // 也可以是动态组件
</keep-alive>

使用exclude来排除不需要缓存的路由

include正好相反,在exclude里的组件不会被缓存。用法类似,不作赘述

三、配合组件内的守卫,页面何时需要做缓存

当我们从home页到product页的时候,不需要缓存,从product页到productDetails页的时候需要缓存。这时候就要用到路由的钩子结合老版本用法来实现了。

product.vue组件中

beforeRouteEnter (to, from, next) {
    // to将要访问的路径
    // from代表从哪个路径跳转而来
    if (from.name === 'home') {
    	to.meta.keepAlive = false
    }
    next()
},
beforeRouteLeave (to, from, next) {
    if (to.name === 'productDetails') {
    	from.meta.keepAlive = true
    }
    next()
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于使用keepalive缓存组件的问题,我可以给你一些基本的指导。 首先,keepalive是一种优化技术,它允许在多个HTTP请求之间共享相同的TCP连接。这样做可以减少建立和关闭连接的开销,并提高性能。 要使用keepalive缓存组件,你需要遵循以下步骤: 1. 检查你的服务器是否支持keepalive。大多数现代的Web服务器(如Nginx、Apache等)默认启用了keepalive。你可以在服务器配置文件中查找相关选项,并确保它们被正确地设置。 2. 在客户端代码中启用keepalive。你可以使用不同的编程语言和框架来实现这个目标。例如,在Java中,你可以使用Apache HttpClient库,并通过设置ConnectionKeepAliveStrategy来启用keepalive。 3. 设置合理的keepalive超时时间。这个时间决定了一个持久连接可以保持空闲的最长时间。如果在这个时间内没有新的请求到达服务器,连接将被关闭。你应该根据你的应用程序的需求来调整这个超时时间。 4. 配置适当的缓存规则。当一个请求被缓存时,服务器将会保持连接开放,并在后续的请求中重用它。你需要根据资源的更新频率和其他相关因素,确定哪些请求可以被缓存,以及它们应该被缓存的时间。 请注意,keepalive缓存组件是一种高级优化技术,它可能需要一定的配置和调优才能发挥最佳效果。你应该进行测试和性能优化,以确保它对你的应用程序产生积极的影响。 希望这些信息对你有所帮助!如果有更多的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Komorebi゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值