深入解析 Vue 项目中的缓存刷新机制:原理与实战

目录

  • 前言
  • 1. Demo
  • 2. 知识拓展

前言

在 Vue 项目中,缓存通常用于存储用户信息、角色权限、系统设置等,以提高页面加载速度并减少 API 请求

这里使用 web-storage-cache 作为封装的本地存储工具,支持 localStorage 和 sessionStorage 方式存储数据

1. Demo

适用于所有涉及权限、用户数据更新的场景,如角色变更、权限调整、系统升级等
使用缓存提高性能,但需要适时刷新,避免数据过时问题
通过 封装 useCache 统一管理本地存储,方便切换 localStorage 和 sessionStorage,提高代码复用性

/**
 * 配置浏览器本地存储的方式,可直接存储对象数组。
 */

import WebStorageCache from 'web-storage-cache'

type CacheType = 'localStorage' | 'sessionStorage'

export const CACHE_KEY = {
  // 用户相关
  ROLE_ROUTERS: 'roleRouters',
  USER: 'user',
  // 系统设置
  IS_DARK: 'isDark',
  LANG: 'lang',
  THEME: 'theme',
  LAYOUT: 'layout',
  DICT_CACHE: 'dictCache',
  // 登录表单
  LoginForm: 'loginForm',
  TenantId: 'tenantId'
}

export const useCache = (type: CacheType = 'localStorage') => {
  const wsCache: WebStorageCache = new WebStorageCache({
    storage: type
  })

  return {
    wsCache
  }
}

export const deleteUserCache = () => {
  const { wsCache } = useCache()
  wsCache.delete(CACHE_KEY.USER)
  wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
  // 注意,不要清理 LoginForm 登录表单
}

对应具体Demo如下:

<template>
  <el-button plain @click="refreshMenu">
    <Icon class="mr-5px" icon="ep:refresh" />
    刷新菜单缓存
  </el-button>
</template>

<script setup>
import { useCache } from '@/hooks/web/useCache'
import { CACHE_KEY } from '@/hooks/web/useCache'
import { useMessage } from '@/hooks/web/useMessage'

const { wsCache } = useCache()
const message = useMessage()

const refreshMenu = async () => {
  try {
    await message.confirm('即将更新缓存刷新浏览器!', '刷新菜单缓存')
    wsCache.delete(CACHE_KEY.USER)
    wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
    location.reload()
  } catch {}
}
</script>

2. 知识拓展

上述实战知识点,核心拓展如下:

refreshMenu 该方法的主要作用是:

  1. 弹出确认框,提示用户即将刷新缓存,并要求确认操作
  2. 删除本地存储中的 USER 和 ROLE_ROUTERS 缓存,确保下次访问时重新获取最新数据
  3. 通过 location.reload() 重新加载页面,使更新的缓存生效
const refreshMenu = async () => {
  try {
    await message.confirm('即将更新缓存刷新浏览器!', '刷新菜单缓存')
    // 清空缓存
    wsCache.delete(CACHE_KEY.USER)
    wsCache.delete(CACHE_KEY.ROLE_ROUTERS)
    // 刷新浏览器
    location.reload()
  } catch {}
}

1.2 CACHE_KEY 配置
CACHE_KEY 统一管理缓存键名,避免在多个地方直接使用字符串,从而降低维护成本:

export const CACHE_KEY = {
  ROLE_ROUTERS: 'roleRouters',  // 角色路由信息
  USER: 'user',                 // 用户信息
  IS_DARK: 'isDark',            // 深色模式
  LANG: 'lang',                 // 语言
  THEME: 'theme',               // 主题
  LAYOUT: 'layout',             // 布局
  DICT_CACHE: 'dictCache',      // 字典缓存
  LoginForm: 'loginForm',       // 登录表单(不应清除)
  TenantId: 'tenantId'          // 租户ID
}

1.3 useCache 封装
useCache 方法封装了 WebStorageCache,便于在项目中按需切换 localStorage 和 sessionStorage:

export const useCache = (type: CacheType = 'localStorage') => {
  const wsCache: WebStorageCache = new WebStorageCache({
    storage: type
  })
  return {
    wsCache
  }
}

localStorage:数据持久化,即使关闭浏览器也不会丢失。
sessionStorage:数据在会话期间有效,关闭浏览器后清除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/972411.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)

1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)&#xff1a;https://www.bilibili.com/video/BV1M6rdYEEog/ 备注&#xff1a; 1.本地离线卡密采用最安全的非对称加解密技术&#xff0c;设备id采用最安全多重混合加密不可逆技术生成&…

实战开发coze应用-姓氏头像生成器(上)

​欢迎关注【AI技术开发者】 上次&#xff0c;我们开发了一个对话形式的头像生成器智能体&#xff08;Agents&#xff09;&#xff0c;广受大家欢迎。 同时也接收到一些用户的反馈&#xff0c;生成前无法看到头像样式、初次使用不会用等等。 对此&#xff0c;我准备使用Coze开…

达梦:用户和模式

目录标题 数据库管理系统与用户权限管理**四权分立****用户管理与权限划分****用户管理界面与权限控制****用户创建与管理****实操**1. **默认创建用户与模式**&#xff1a;2. **用户权限和角色分配**&#xff1a;3. **命令行管理用户与角色**&#xff1a;4. 模式也可以创建 **…

【C++】类与对象全面剖析(尾卷)(构造深化、类型转换、static成员特性及内部类与匿名对象)

文章目录 一、再探构造函数二、隐式类型转换三、类中的静态成员1.静态成员变量2.静态成员函数 四、友元函数与友元类五、内部类六、匿名对象 一、再探构造函数 在之前的文章中我们大致将构造函数讲完了&#xff0c;但是还有一个比较重要的知识点当时没有讲到&#xff0c;因为如…

【部署优化篇四】《DeepSeek移动端优化:CoreML/TFLite实战对比》

手机里的AI助手能秒速回答你的问题,游戏人物能实时追踪你的表情变化,这些酷炫功能的背后都离不开移动端机器学习框架的支撑。今天我们就来撕开两个当红炸子鸡框架CoreML和TFLite的神秘面纱,看看它们在模型优化这件事上到底藏着哪些独门绝技。 一、移动端优化的生存法则 在…

SAM C++ TensorRT(实时图像分割)

SPEED SAM C TENSORRT &#x1f310; 1、概述 用于SAM&#xff08;segment anything model分割一切模型&#xff09;的TensorRT和CUDA优化的高表现C实现&#xff0c;特别适用于实时图像分割任务。 &#x1f4e2; 更新 模型转换&#xff1a;从ONNX模型构建TensorRT引擎以加速…

鸿蒙5.0实战案例:关于图像撕裂、掉帧等异常现象的原理以及优化方案

往期推文全新看点&#xff08;文中附带全新鸿蒙5.0全栈学习笔录&#xff09; ✏️ 鸿蒙&#xff08;HarmonyOS&#xff09;北向开发知识点记录~ ✏️ 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

谈谈 ES 6.8 到 7.10 的功能变迁(1)- 性能优化篇

前言 ES 7.10 可能是现在比较常见的 ES 版本。但是对于一些相迭代比较慢的早期业务系统来说&#xff0c;ES 6.8 是一个名副其实的“钉子户”。 借着工作内升级调研的任务东风&#xff0c;我整理从 ES 6.8 到 ES 7.10 ELastic 重点列出的新增功能和优化内容。将分为 6 个篇幅给…

用 Biome 替代 ESLint 和 Prettier

简介 ESLint 和 Prettier ESLint&#xff1a;代码质量检查工具&#xff0c;确保代码风格一致与无错误 Prettier&#xff1a;代码格式化工具&#xff0c;自动美化代码布局 所以&#xff1a;ESLint Prettier 能自动美化代码、自动检查代码错误的工具 Biome Biome&#xff1a;…

cluster-smi 命令详解

cluster-smi 是一个用于管理和监控集群中 GPU 的命令行工具&#xff0c;通常用于显示集群中每个节点&#xff08;如 GPU 服务器&#xff09;上的 GPU 使用情况。该命令是类似于 nvidia-smi 的工具&#xff0c;但它支持在集群环境中对多个节点进行管理和监控。 使用 cluster-sm…

Cursor使用及搭建网络环境

一、Cursor使用 1、注册、登录、下载 【CursorClaude】 2、登录后 3、破解方式 第一种方式&#xff1a; 14天到期后用其他邮箱重新注册&#xff0c;网易邮箱可以无限注册&#xff0c;把cursor中之前登录的账号退出&#xff0c;再登录新的账号。 第二种方式&#xff1a; 因为…

聚焦地灾防治,助力城市地质安全风险防控

城市是人类社会发展的重要载体&#xff0c;承载着经济繁荣、文化交流和人口聚集等重要功能。然而&#xff0c;由于城市建设过程中地质条件复杂&#xff0c;地质灾害风险隐患存在&#xff0c;城市地质安全等问题日益突出&#xff0c;引起人们的广泛关注。为保障城市发展的安全和…

VsCode美化 Json

1.扩展中输入:pretty json 2. &#xff08;CtrlA&#xff09;选择Json文本 示例:{ "name" : "runoob" , "alexa" :10000, "site" : null , "sites" :[ "Google" , "Runoob" , "T…

当一个后端下载了一个VUE开源项目,怎么开始着手玩一下

当后端想玩一玩前端的时候 写在前面1、你需要安装、学习的东西2、开始一个项目2.1、用vs code打开项目目录2.2、安装项目依赖2.3、启动项目 3、新建一个你自己的页面4、element怎么用 写在前面 这里给你的角色是一个后端开发工程师&#xff0c;会一点浅薄的前端三大件&#xf…

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层&#xff1f;传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…

Git是什么

简单介绍&#xff1a; Git是一个分布式版本控制系统&#xff0c;用于跟踪文件的更改&#xff0c;特别是在多人协作开发的环境中。 Key: 分布式 版本控制 系统 最常用于软件开发&#xff0c;但也可以用于管理任何类型的文件和文件夹。 Git帮助团队跟踪和管理文件的历史版本&a…

蓝星旋钮烧录底座组装说明

烧录底座pcb为群内清秋设计&#xff0c;感谢大佬开源 效果展示 指示灯明亮 可安装60mm硅胶防滑垫 话不多说&#xff0c;演示组装过程

Comsol 双层带穿孔多孔材料背衬的穿孔板的吸声:亥姆霍兹共振腔的能量耗散

提出了一种新型的低频吸声赫尔姆霍兹共振器&#xff0c;它由两个带孔的刚性面板和一个逐渐带孔的多孔材料背衬组成。通过使用双重孔隙理论将结构划分为多层系统&#xff0c;开发了一个理论模型&#xff0c;该模型通过有限元模拟和实验测量得到验证。研究了所提出的声学超材料的…

前OpenAI CTO Mira Murati创办AI新公司

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

23. AI-大语言模型-DeepSeek赋能开发-Spring AI集成

文章目录 前言一、Spring AI 集成 DeepSeek1. 开发AI程序2. DeepSeek 大模型3. 集成 DeepSeek 大模型1. 接入前准备2. 引入依赖3. 工程配置4. 调用示例5. 小结 4. 集成第三方平台&#xff08;已集成 DeepSeek 大模型&#xff09;1. 接入前准备2. POM依赖3. 工程配置4. 调用示例…