详谈Vue的缓存方法

最近新做了个需求“前端缓存”
需求背景:解决表单高频率重复填报问题,要求打开页面自动填充上次录入的数据,数据存储期限为一周(7天有效期)。
说起缓存首先想到的则是 localstoragesessionStorage
  • sessionStorage

    也称会话缓存,当用户关闭浏览器窗口后,数据就会被删除;

    sessionStorage.setItem("key","value");//存储
    sessionStorage.getItems("key");//按可以进行取值
    sessionStorage.removeItems("key");//按key单个删除
    sessionStorage.clear();//删除全部数据
    sessionStorage.length;//获取数据的数量
    sessionStorage.valueOf();//获取全部值
    
  • localstorage

    储存的数据没有时间限制,只要不删除,都会存在

    localstorage.setItem("key","value");//保存数据
    localstorage.getItem("key");//读取数据
    localstorage.removeItem("key",);//删除单个数据
    localstorage.clear();//删除所有数据
    localstorage.key(index);//得到某个索引的key
    key和value都必须为字符串,web Storage的API只能操作字符串
    
由于sessionStorage浏览器关闭窗口数据会被清空,所以对我所要开发的需求不适用。如果只考虑这两种方案的话,这么看来localstorage相对来说会比较合适,但是如果使用localstorage存储并且设置时效的话从代码层面来看会比较麻烦。
localstorage具体实现思路
1. 存储数据时加上时间戳

当数据较大时,可以利用localstorage,存数据时候写入一个时间,获取的时候再与当前时间进行比较
在项目开发中,我们可以写一个公用的方法来进行存储的时候加上时间戳

    export function setLocalStorageAndTime (key, value) {
    window.localStorage.setItem(key, JSON.stringify({ data: value, time: new Date().getTime() }))
    }
项目中应用
    有数据再进行存储 setLocalStorageAndTime('XXX', {name: 'XXX'})
2. 获取数据时与当前时间进行比较
export function getLocalStorageAndTime (key, exp = 86400000) {
  // 获取数据
  let data = window.localStorage.getItem(key)
  if (!data) return null
  let dataObj = JSON.parse(data)
  // 与过期时间比较
  if (new Date().getTime() - dataObj.time > exp) {
    // 过期删除返回null
    removeLocalStorage(key)
    console.log('信息已过期')
    return null
  } else {
    return dataObj.data
  }
}
程序员最大的特点就是懒,有插件就绝不会放过,能CV就绝对不手敲。由于写起来太繁琐,所以果断放弃使用localstorage,在另寻更简单方便的方法。通过同事的引荐最终选择了Vue.ls,那就来介绍介绍 Vue.ls吧。
Vue.ls

一个Vue封装的本地储存的方法。Vue插件,用于从Vue上下文中使用本地Storage,会话Storage和内存Storage,简单易上手,Api说明也是比较全面。

安装
NPM

npm install vue-ls --save

Yarn

yarn add vue-ls

使用

Vue-ls Storage API

import Storage from 'vue-ls';
 
options = {
  namespace: 'vuejs__', // key键前缀
  name: 'ls', // 命名Vue变量.[ls]或this.[$ls],
  storage: 'local', // 存储名称: session, local, memory
};
 
Vue.use(Storage, options);
// 或 Vue.use(Storage);
 
new Vue({
    el: '#app',
    mounted: function() {
        Vue.ls.set('foo', 'boo');
        // 设置有效期
        Vue.ls.set('foo', 'boo', 60 * 60 * 1000); //有效1小时
        Vue.ls.get('foo');
        Vue.ls.get('boo', 10); // 如果没有设置boo返回默认值10 
        
        let callback = (val, oldVal, uri) => {
          console.log('localStorage change', val);
        } 
        
        Vue.ls.on('foo', callback) //侦查改变foo键并触发回调 
        Vue.ls.off('foo', callback) //不侦查
        
        Vue.ls.remove('foo'); // 移除
    }
});
Global(全局)

Vue.ls

Context(上下文)

this.$ls

API 说明

Vue.ls.get(name, def)

返回storage中 name值。在返回之前,内部解析JSON中的值

  • def: 默认null, 如果为设置则返回 name.

Vue.ls.set(name, value, expire)

storage设置 namevalue.并将 value转化为 JSON

expire: 默认为 null, name有效时间以毫秒为单位

Vue.ls.remove(name)

storage中移除 name. 成功移除 true, 否则返回false.

Vue.ls.clear()

清除storage.

Vue.ls.on(name, callback)

持续监听 name在其他标签上的更改,更改时触发 callback, 传递以下参数:

  • newValue: 当前storage中 name, 从持久化的JSON中解析
  • oldValue: 旧的storage中 name, 从持久化的JSON中解析
  • url: 修改来自选项卡的URL

Vue.ls.off(name, callback)

删除以前的侦听器 Vue.ls.on(name, callback)

实操

!存储在这里插入图片描述

存储:键值对形式,最后一个参数为有效期

在这里插入图片描述

取值:参数为存进去的键

在这里插入图片描述

查看:存储的数据可在localstorage中查看

总结

localstorage(本地存储)则以文件的方式存储在本地,永久保存;sessionstorage( 会话存储 ) ,临时保存;Vue.ls是一个Vue封装的本地储存的方法,简单方便易上手。localStorage和sessionStorage只能存储字符串类型,对于复杂的对象可以使用ECMAScript提供的JSON对象的stringify和parse来处理。

  • 14
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: Vue 可以使用多种方法缓存事件。一些常见的方法包括: 1. 使用计算属性:在事件处理程序,可以通过将数据存储在计算属性缓存事件。 2. 使用 Vuex:Vuex 是 Vue 的状态管理模式,可以存储应用程序状态并以统一的方式进行管理。 3. 使用本地存储:可以使用浏览器的本地存储(如 localStorage 或 sessionStorage)缓存事件。 4. 使用 Vue 实例的响应式对象:可以将数据存储在 Vue 实例的响应式对象以便在事件处理程序使用。 这些是缓存事件的一些常见方法,不同的需求可能需要使用不同的方法。 ### 回答2: 在Vue,有多种方法可以缓存事件。 1. 使用v-once指令:v-once指令会把元素或组件标记为静态的,只渲染一次,并且不会再重新渲染。这样可以节省性能开销,特别是在使用大量静态内容的情况下。 2. 使用computed属性:computed属性是Vue的计算属性,它的值会根据依赖的数据进行缓存,并且只有在依赖数据变化时才会重新计算。如果某个事件处理函数要根据一些响应式数据进行计算,可以将计算逻辑写在computed属性,这样可以缓存计算结果,避免重复计算。 3. 使用缓存方法:在事件处理函数内部,可以使用缓存方法缓存结果。比如,可以使用闭包来缓存某个函数的结果,每次调用事件处理函数时,先判断缓存是否已经存在结果,如果存在则直接使用缓存的结果,否则再进行计算并将结果缓存起来。这样可以减少重复计算的次数,提高性能效率。 4. 使用keep-alive组件:keep-alive组件是Vue提供的一个特殊组件,它可以将动态组件缓存起来,当组件切换时不会重新渲染,从而提高性能。如果某个事件处理函数会引起组件的切换,可以将这个组件包裹在keep-alive组件,这样可以缓存组件的状态,避免多次重新渲染。 综上所述,Vue缓存事件的方法包括使用v-once指令、computed属性、缓存方法和keep-alive组件等。根据具体的场景和需求,可以选择适合的方法来实现事件的缓存,提高应用的性能。 ### 回答3: 在Vue,可以通过以下几种方式来实现缓存事件: 1. 利用computed属性:可以将需要缓存的事件定义为computed属性。computed属性会根据它的依赖变化进行缓存,只有依赖发生变化时才会重新计算。 2. 利用watch属性:可以使用watch属性来监听数据的变化,并在数据变化后执行相应的事件。通过设置immediate参数为true,可以在初始加载时立即执行事件,并将结果进行缓存。 3. 利用mixin混入:可以定义一个mixin对象,并将其混入到需要缓存事件的组件。这样,在组件就可以直接使用mixin定义的缓存事件,避免重复编写相同的事件逻辑。 4. 利用keep-alive组件:Vue提供了keep-alive组件,可以将需要缓存的组件包裹起来。在切换组件时,被keep-alive包裹的组件会被缓存起来,下次再次进入该组件时,不会重新创建,而是直接使用之前的实例。 以上是一些常见的Vue缓存事件的方法,根据具体的需求和场景选择合适的方式来实现缓存
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值