详谈Vue的缓存方法_vue把字符串放在缓存中-程序员宅基地

技术标签: vue.js  

最近新做了个需求“前端缓存”
需求背景:解决表单高频率重复填报问题,要求打开页面自动填充上次录入的数据,数据存储期限为一周(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来处理。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46175155/article/details/114673987

智能推荐

C语言与嵌入式文件系统:FatFS、LittleFS等嵌入式文件系统的使用与定制(一)-程序员宅基地

文章浏览阅读947次,点赞21次,收藏20次。C语言通过调用FatFS或LittleFS提供的API函数,能够便捷地实现对嵌入式文件系统的初始化、文件和目录的读写、删除等操作,并通过细致的错误处理机制保障系统的稳定性和可靠性。

【基于springboot海滨学院班级回忆录的毕业设计】-程序员宅基地

文章浏览阅读767次,点赞12次,收藏14次。博主介绍:全网粉丝15W+,CSDN特邀作者、211毕业、高级全栈开发程序员、大厂多年工作经验、码云/掘金/华为云/阿里云/InfoQ/StackOverflow/github等平台优质作者、专注于Java、小程序技术领域和毕业项目实战,以及程序定制化开发、全栈讲解、就业辅导精彩专栏 推荐订阅2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐Java精品实战案例《500套》

单文件超过4GB就无法拷贝到U盘?这个你一定要知道_exfat最大支持多少g单个文件拷贝-程序员宅基地

文章浏览阅读874次,点赞27次,收藏9次。原来U盘还有这么多小知识,长脑子了……_exfat最大支持多少g单个文件拷贝

iStat Menus如果出现锁定风扇转速的问题解决办法_istat menus 风扇规则设置-程序员宅基地

文章浏览阅读2.4k次。iStat Menus如果出现锁定风扇转速的问题解决办法1. 打开iStat Menus软件,将风扇转速设置为“使用系统控制,或default”2. 在软件页面选择左上角苹果图标右边的iStat Menus,选择里边的卸载进行操作,英文版的叫Uninstall,卸载完成之后,风扇转速就恢复正常了..._istat menus 风扇规则设置

树莓派Raspberry Pi上安装和使用RPi.GPIO模块以及引脚对照表_rpi.gpio库安装-程序员宅基地

文章浏览阅读2.2w次,点赞14次,收藏123次。记录自己学习树莓派的过程。如果要使用Python来使用GPIO信号,需要使用RPi.GPIO模块。如果你使用的是Python2版本,树莓派默认安装了RPi.GPIO模块(python-rpi.gpio)。目前大多数的人都是使用Python3了,所以我们要手动安装Python v3版本的模块。1.安装RPi.GPIO模块sudo apt-get updatesudo apt-..._rpi.gpio库安装

【PCL】 PCL点云分割总结_pcl点云分割算法耗时对比-程序员宅基地

文章浏览阅读7.5k次,点赞10次,收藏81次。目录摘要1.点云分割算法的属性2.点云分割的挑战3.点云分割算法介绍01 基于边缘的方法02 基于区域分割方法03 基于属性的方法04 基于模型的方法05 基于图优化的方法4.总结5.PCL点云中的分割模块参考摘要三维点云分割是将同属性的点云物体分割出来,以便于单独对该点云物体处理,但是由于点云数据是一种高冗余度,且不均匀的数据结构,所以点云..._pcl点云分割算法耗时对比

随便推点

动态矩阵控制(DMC)的简单理解及其示例_dmc控制-程序员宅基地

文章浏览阅读2.5w次,点赞40次,收藏241次。文章结构前言DMC的基本思想DMC的控制流程生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入前言在学习模型预测控制的课程当中接触到了动态矩阵控制(DMC)算法,虽然不会在以后继续深入,但它的核心思想:控制、预测和校正还是可圈可点的。这里以一个简单的例子说明DMC的基本原理和控制流程,尽量做到省去复杂的数学公式而理解DMC,学_dmc控制

Transformer模型详解-程序员宅基地

文章浏览阅读10w+次,点赞157次,收藏791次。转载请注明出处,原文地址简介Attention Is All You Need是一篇Google提出的将Attention思想发挥到极致的论文。这篇论文中提出一个全新的模型,叫 Transformer,抛弃了以往深度学习任务里面使用到的 CNN 和 RNN ,目前大热的Bert就是基于Transformer构建的,这个模型广泛应用于NLP领域,例如机器翻译,问答系统,文本摘要和语音识别等等方向..._transformer

在VScode 中使用EASYX详细教程(VScode+MSVC+Easy X)_easyx vscode 使用方法-程序员宅基地

文章浏览阅读2.8w次,点赞38次,收藏193次。在VScode 中使用EASYX详细教程众所周知,vscode是一款强大的IDE,深受广大码友喜爱,博主曾尝试过用它实现各种脱离特定平台的写码,这里给大家介绍vscode配置EASYX的详细教程。1.配置MSVC编译环境首先要知道的是EASYX官方库只支持vs的编译器,不支持MinGW,除非是自己从github上下的代码重新编译过的并且封装的库。可以借鉴一下其他优秀博主的教程,这里不详细介绍。参考教程1参考教程2教程2没有包含vs的库,所以每次编译都要从vs的develop模式进入,有些麻烦_easyx vscode 使用方法

【CPCI、CNKI】第二届旅游管理与产业经济国际学术会议(TMIE 2023)-程序员宅基地

文章浏览阅读52次。旅游管理、产业经济、环境可持续发展

软件测试——分类-程序员宅基地

文章浏览阅读115次。转载:https://www.cnblogs.com/findyou/p/6480411.html参考:https://blog.csdn.net/daboluo521/article/details/813850171、按开发阶段:单元测试、集成测试、系统测试、验收测试2、按测试实施组织:α、β、第三方3、按测试执行方式:静态测试、动态测试4、按是否查看代码:黑盒测试、白盒测试、灰盒测试5..._用户界面测试属于功能层吗

360画报壁纸/360动态锁屏壁纸在哪个文件夹,保存方法_360bkinfo-程序员宅基地

文章浏览阅读3.6k次。360动态屏保壁纸/360画报壁纸/360浏览器锁屏壁纸 保存方法教程保存路径_360bkinfo

推荐文章

热门文章

相关标签