Vue-Router实现前端页面缓存

目录

1、基本认识

(1)为什么要设置max?

(2)注意:

(3)页面缓存如何重新加载数据,或做数据处理?

2、代码实现

(1)使用include和exclude实现页面缓存

(2)动态判断要显示的router-view(路由出口)

3、总结


1、基本认识

        router-view(路由出口)标签在本质上也是一个functional组件,用于渲染路径匹配到的视图组件,它可以被keep-alive所包裹。

  keep-alive接收三个属性:

  • include:取值为字符串或正则表达式。只有名称匹配的组件会被缓存
  • exclude:取值为字符串或正则表达式。只有名称匹配的组件不会被缓存
  • max:number,最多可以缓存多少组件实例。

(1)为什么要设置max?

        当大型项目的很多页面需要缓存时,如果不设置最大页面缓存量,当缓存数量过于庞大时,会占用很多内存,影响页面响应及用户体验。

(2)注意:

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

(3)页面缓存如何重新加载数据,或做数据处理?

        被缓存的组件都会新增两个生命周期,activated deactivated ,在重新进入被缓存的页面时,activated此生命周期会触发。在离开被缓存组件时,deactivated此生命周期会被触发。

        我们可以在相应的生命周期中进行一些数据的处理等。

2、代码实现

(1)使用include和exclude实现页面缓存

// App.vue
<template>
 <div>
  <keep-alive :include='aliveComponents'>
    <router-view></router-view>
  </keep-alive>
 </div>
</template>  
<script>
  export default{
    data() {
      return {
        //需要 要缓存的组件
        aliveComponents: ['productList']
      }
    }
  }
</script>

        name为productList的页面组件会被缓存起来,可以在钩子函数activated和deactivated中处理数据等。

(2)动态判断要显示的router-view(路由出口)

       为路由表中需要缓存的页面配置meta属性,新增keepAlive为true

// router/index.js
{
  path: '/productList',
  name: 'productList',
  component: () => import(/* webpackChunkName: "productList" */ '../views/product/index.vue'),
  meta: {
    keepAlive: true
  }
}
// App.vue
<template>
 <div>
  <keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
  </keep-alive>
  <router-view v-if="!$route.meta.keepAlive"></router-view>
 </div>
</template>  
<script>
  export default{
    data() {
      return {
        //要缓存的路由组件
        //aliveComponents: ['productList']
      }
    }
  }
</script>

此方法更推荐使用,因为我们可以动态的控制路由meta的keepAlive属性是否为true,根据业务需求,在组件钩子函数beforeRouteLeave中进行动态修改,从而做到某些时刻缓存,某些时刻重新加载。

// 假设
beforeRouteLeave(to, from, next){
    if(to.name === 'Cart') {
      to.meta.keepAlive = true
    }else{
      to.meta.keepAlive = false
    }
    next()
  }

3、总结

        无论是缓存页面还是缓存数据等,都要根据实际业务进行抉择,否则可能造成内存浪费或影响体验等。

"ruoy-vue"是一个基于Vue.js的开源框架,用于简化前端开发。如果你想要在使用ruoy-vue实现iframe页面缓存,可以考虑以下几个步骤: 1. 使用`vue-router`的HTML5 History模式(H5 History API):Vue Router允许你在浏览器的历史记录中导航,这对于处理iframe内部的路由非常有用。配置Vue Router时,设置mode为history。 ```javascript import VueRouter from 'vue-router' const router = new VueRouter({ mode: 'history', routes: [...] }) ``` 2. 如果iframe内容是动态加载的,你可以利用`beforeRouteUpdate`钩子来判断是否需要更新iframe。如果内容未改变,则从缓存中返回。 ```javascript router.beforeEach((to, from, next) => { // 检查iframe内容是否已缓存,如未变则直接返回 const cachedIframeContent = cache.get(to.fullPath) if (cachedIframeContent) { iframe.srcdoc = cachedIframeContent } else { // 否则从服务器获取并更新缓存 fetchIframeContent().then(content => { cache.set(to.fullPath, content) iframe.srcdoc = content }) } next() }) ``` 3. 缓存管理:你可以使用localStorage、sessionStorage或第三方库(如axios-cache-adapter)来保存iframe内容。在每次请求成功后将结果存储起来,并在下次请求时检查是否有缓存。 ```javascript const cache = new Cache('myCacheKey', { maxAge: 60 * 60 * 1000 }) // 一小时缓存 function fetchIframeContent() { return axios.get('/api/iframe-content').then(response => response.data) } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值