vue前端缓存问题解决方案

2023-10-27

问题描述

大家用vue脚手架搭建前端工程时,常被缓存问题所困扰,具体的表现就是,当程序版本升级时,用户因为缓存访问的还是老的页面,然后很多同学很暴力的直接在index.html中加入了这几行代码:

<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">

升级时缓存问题倒解决了,但直接导致了用户每次访问你的程序时都要重新请求服务器,所有的静态资源都无法用缓存了,浪费流量,网络压力变大。

需求澄清

我们真正需要解决的问题,不是单纯的要缓存或者不要缓存,而是期望视情况而定:

1、程序每次升级后,用户都不会因为缓存问题而执行的仍然是老的程序。

2、若程序没升级,用户对静态资源的请求则能用到缓存。

解决原理

由于vue脚手架每次打包时,都会将打出的静态资源文件名加个哈希后缀,且index.html中引入时也加了对应的哈希后缀,所以每个版本的静态资源都是全新的,不用担心因升级导致的缓存问题。那么只需让index.html不缓存,且让其他静态资源缓存,就能实现要求。

vue前端缓存问题解决方案

vue-cli打包后生成的js文件

让静态资源有缓存好办,问题在于怎么只让index.html不缓存。这里我们已经不能单单靠前端代码来实现了,需要用到服务器配置。通过服务器配置,来单独设置请求index.html时的header,以达到控制缓存的目的。

具体实现

如果你用Ngnix:

Ngnix还是比较容易实现的,只需增加以下配置:

location = /index.html {
 add_header Cache-Control "no-cache, no-store";
}

如果你用Tomcat:

tomcat稍微麻烦点,需要开发并配置一个过滤器(Filter),如果你只懂前端,那可能需要找后端的兄弟帮忙了。

1、首先我们要用java写个过滤器:

vue前端缓存问题解决方案

注意:路径要和第三步的配置保持一致

2、然后我们把这个过滤器打成jar包,名字随便,放在tomcat/lib目录下即可。

3、最后,我们需要修改配置文件tomcat/conf/web.xml,在末尾</web-app>的上方增加以下代码:

vue前端缓存问题解决方案

MyFilter是你给过滤器起的名字,可随便改

也没有太麻烦,应该大部分同学都能搞定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue前端缓存问题解决方案 的相关文章

  • pip简明教程(Windows)

    pip是一种Python包管理器 PyPA Python Packaging Authority 是一个管理Python 相关包方面的各项工程的工作组 推荐使用pip进行Python 包管理 概述 版本 pip 20 3优化了依赖解析器 p
  • 使用 Wiser 进行mail 单体测试

    import org junit After import org junit Before import org junit Test import org junit runner RunWith import org springfr
  • 等差数列

    链接 等差数列 牛客题霸 牛客网 nowcoder com 描述 等差数列 2 5 8 11 14 从 2 开始的 3 为公差的等差数列 输出求等差数列前n项和 数据范围 1 le n le 1000 1 n 1000 输入描述 输入一个正
  • 正点原子imx6ull开发板视频监控项目实战系列3: ffmpeg

    1 Ffmpeg是什么 1 一套开源软件 2 可以记录 转换音视频 可以从摄像头中 记录视频 从声卡中 记录音频 可以转换成各种格式 保存起来 3 好多视频播放器的内核就是FFmpeg 2 FFmpeg的简易理解 这个流程的文字描述大概是这
  • 2022年蓝桥杯C++B组题解 - 很详细

    本人这次侥幸省1 特做题解复习 哈哈哈 1 进制转换 5分 问题描述 直接计算 2 2 9 2 9 9 9 答案 1478 2 顺子日期 5分 这题有争议 主要在于0等不能开头 如 20220121 本人认为0不能作为开头 因为例题中202
  • linux安装maven及配置环境变量

    linux下载maven 下载maven安装包 wget http mirrors cnnic cn apache maven maven 3 3 5 2 binaries apache maven 3 5 2 bin tar gz 解压下

随机推荐

  • ant-design-vue 库 Loading 组件封装

    ant design vue 库中 Spin 用于页面和区块的加载中状态 页面局部处于等待异步数据或正在渲染过程时 合适的加载动效会有效缓解用户的焦虑 重构 Loading 组件
  • Java设计模式——责任链模式

    文章目录 责任链模式 深入讲解责任链模式拆分代码 场景 责任链模式 责任链模式 有多个对象 每个对象持有对下一个对象的引用 这样就会形成一条链 请求在这条链上传递 直到某一对象决定处理该请求 但是发出者并不清楚到底最终那个对象会处理该请求
  • NGINX location 在配置中的优先级

    location表达式类型 表示执行一个正则匹配 区分大小写 表示执行一个正则匹配 不区分大小写 表示普通字符匹配 使用前缀匹配 如果匹配成功 则不再匹配其他location 进行普通字符精确匹配 也就是完全匹配 它定义一个命名的 loca
  • 安装VS Code 和 MiKTeX开发环境

    下载 Getting MiKTeX 然后以管理员方式运行安装 配置VS Code 之后配置VS Code 选择扩展 两个位置都可以 然后搜索Latex 然后打开设置 这样就打开了setting json文件 然后输入配置 Latex wor
  • eclipse 使用maven 构建springboot +全局异常与局部异常区别

    一 controller 局部异常 package com zzg springbootone controller import org springframework web bind annotation ExceptionHandl
  • 开启系统代理之后,Microsoft Store 等 UWP 应用无法联网

    解决方法 以管理员方式打开 Powershell 输入 foreach n in get appxpackage packagefamilyname checknetisolation loopbackexempt a n n 恢复命令 f
  • unity粒子系统简单常用功能介绍

    1 GameObject Create Other Particle System 2 选中 Particle System 可看到下列屬性 3 Particle System Duration 粒子持续时间 设定为5秒 不开启循环模式下粒
  • 分布式事务神器:Spring Cloud Alibaba Seata 实战解析

    catalog 摘要 引言 官网 背景与挑战 Seata 的崛起 深入分析 Seata 核心概念解析 事务模式探索 快速上手 Seata 环境准备 分布式事务示例 高级应用与实践 Seata 集群部署与高可用性 自定义扩展与适配 性能优化与
  • (94)Verilog实现计数器

    94 Verilog实现计数器 1 1 目录 1 目录 2 FPGA简介 3 Verilog HDL简介 4 Verilog实现计数器 5 结语 1 2 FPGA简介 FPGA Field Programmable Gate Array 是
  • [leetcode: Python]389. Find the Difference

    题目 Given two strings s and t which consist of only lowercase letters String t is generated by random shuffling string s
  • 开源路上的酸甜苦辣

    多年前决定开源时 我们挺兴奋的 作为典型码农 用 开源是日常 而全力投入 做 开源 对我们绝大部分人都是头一遭 我们也曾天真地以为 开源 能有多难呢 不就是把代码放出去 大家一起用 一起写嘛 但是 开源 这事儿真的是这样子么 还是先看几个灵
  • #include <math.h>中sin,cos函数的使用

    在使用QT的时候遇到绘制类似仪表盘的问题 要定位仪表盘上刻度的坐标然后进行刻度线的绘制 需要把仪表盘角度等分 然后通过角度正余弦函数sin cos函数获得刻度线的坐标 math h中的sin和cos等函数的入参原型如下 double sin
  • 电池防反电路

    通常情况下直流电源输入防反接保护电路是利用二极管的单向导电性来实现防反接保护 如下图1示 图1 串联二极管保护系统不受反向极性影响 二极管有0 7V的压降 这种接法简单可靠 但当输入大电流的情况下功耗影响是非常大的 以输入电流额定值达到2A
  • Linux内核(5) - 内核学习的相关资源

    世界上最缺的不是金钱 而是资源 当我在一份报纸上看到这句大大标题时 我的第一反应是 作者一定是个自然环保主义者 然后我在羞愧得反省自身的同时油然生出一股对这样的无产主义理想者无比崇敬的情绪来 于是 我继续往下看 因此在XXX还未正式面市之时
  • sql之dml语句,语法和思路

    这些都是我自学时手打到文本文档 在复制粘贴到博客的 有一些命令格式不对 但全部百分百原创 如果有疑问或者不对的地方 欢迎评论区指正 也可以加q群592383030来探讨 我就是自学的普通人 不卖课 不涉及补习机构 我会出一整套mysql的学
  • OSS设置CORS规则以后还是报No 'Access-Control-Allow-Origin'解决方法

    OSS设置CORS规则以后还是报No Access Control Allow Origin 解决方法 在OSS控制台设置了CORS规则以后 通过JS程序去调用的时候报No Access Control Allow Origin heade
  • 合并两个数组为有序数组:

    合并两个数组为有序数组 思路 先合并再排序 数组的合并 利用 System arraycopy 方法实现数组复制 1 System中提供了一个native静态方法arraycopy 可以使用这个方法来实现数组复制 2 public stat
  • Anaconda打开Navigator报错-Navigator Error An unexpected error occurred on Navigator start-up

    问题如图 Windows下 1 使用管理员运行 conda prompt 2 执行命令 conda update anaconda navigator 3 还是不行就试试命令 anaconda navigator reset 来源 Navi
  • Opencv contours找出最大轮廓

    在处理二值图像时 常用 cv2 findContours 查找轮廓 如下所示 find all contours contours hierarchy cv2 findContours binary cv2 RETR TREE cv2 CH
  • vue前端缓存问题解决方案

    问题描述 大家用vue脚手架搭建前端工程时 常被缓存问题所困扰 具体的表现就是 当程序版本升级时 用户因为缓存访问的还是老的页面 然后很多同学很暴力的直接在index html中加入了这几行代码 升级时缓存问题倒解决了 但直接导致了用户每次