Vue 打包上线后的缓存问题

问题描述

在使用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">

这种方法虽然解决了缓存问题,但却导致用户每次访问程序都需要重新请求服务器,无法利用静态资源的缓存,从而增加了流量消耗和网络压力。

需求澄清

实际上,我们需要解决的问题并不是简单地要缓存或不要缓存,而是希望根据情况灵活控制

  • 每次程序升级后,用户不会因为缓存问题而访问到旧版本的程序。
  • 如果程序没有升级,用户可以利用静态资源的缓存,减少对服务器的请求。

解决原理

在vue脚手架的每次打包过程中,会给生成的静态资源文件名添加哈希后缀,并 index.html中引入带有相应哈希后缀的静态资源文件。因此,每个版本的静态资源都是被正确引入的,不会因升级而出现缓存问题。因此,我们只需让index.html不被缓存,而让其他静态资源可以被缓存,即可满足需求。

然而,要实现让静态资源被缓存,但让index.html不被缓存,则需要借助服务器配置,通过设置针对index.html请求的header来控制缓存。

具体实现

Nginx服务器配置

如果你使用Nginx服务器,你可以简单地添加以下配置:

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

Apache服务器配置

如果你使用Apache服务器,你可以在VirtualHost中增加以下配置:

<Files "index.html">  Header set Cache-Control "no-cache, no-store"  </Files>

修改webpack的配置文件

同时,你也可以通过修改webpack的配置文件来实现对静态资源文件名的哈希处理,以确保静态资源能够被有效缓存:

 onst Timestamp = new Date().getTime();// Vue.config.js 配置选项
module.exports = {configureWebpack: { // webpack 配置output: { // 输出重构  打包编译后的 文件名称:【模块名称.contenthash】使用contenthash保证了文件被修改才会重新生成新的文件名,让用户能有效使用浏览器缓存,减轻服务器压力filename: `static/js/[name].[contenthash:8].js`,chunkFilename: `static/js/[name].[contenthash:8].js`},}
}

通过以上步骤,你可以灵活地控制缓存,让用户在程序升级后访问到最新版本的页面,同时减少了静态资源的重复请求,优化了用户体验和网络流量消耗。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux配置SFTP用户的详细过程

0. 背景 Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个目录对外暴露给业务人员使用。业务人员使用sftp协议上传文件。 下面是相关配置&#xff1a; SFTP 用户名&#xff1a;iios SFTP主目录&#xff1a;/data/tomcat/apa…

用人部门职位说明书模板

用人部门职位说明书模板 岗位名称 岗位职责&#xff1a; 1. 2. 3. 4. 任职要求&#xff1a; 1. 2. 3. 4. 岗位名称 岗位职责&#xff1a; 1. 2. 3. 4. 任职要求&#xff1a; 1. 2. 3. 4. 【例如】 售前咨询顾问 岗位职责&#xff1a; 1、负责电子政务…

王者荣耀游戏制作

1.创建所需要的包 2.创建怪物类 bear package beast;import wangzherogyao.GameFrame;public class Bear extends Beast {public Bear(int x, int y, GameFrame gameFrame) {super(x, y, gameFrame);setImg("img/bear.jpg");width 85;height 112;setDis(65);}} b…

Encoder、Decoder和Encoder-Decoder

首先LLM有3种架构&#xff1a;Encoder-only、Decoder-only、encode-decode 整体情况 1、Encoder将可变长度的输入序列编码成一个固定长度的向量&#xff0c;比如在bert中应用的encoder&#xff0c;其实是输入和输出是等长的向量。通常情况下&#xff0c;encoder是用来提取特征…

实现产品License验证功能

通过研究调查&#xff0c;可以利用Truelicense开源框架实现&#xff0c;下面分享一下如何利用Truelicense实现授权验证功能。 在此之前先介绍一下License授权和验证的原理&#xff1a; 1、 首先需要生成密钥对&#xff0c;方法有很多&#xff0c;JDK中提供的KeyTool即可生成…

c++socket的select函数以及多路复用

csocket的select函数以及多路复用 1.select函数原型使用示例及解释 2.select()函数返回值3.select()函数与socket阻塞的关系与原因4.select函数的意义5.深入理解select模型&#xff08;1&#xff09;特点&#xff08;2&#xff09;带外数据&#xff08;2&#xff09;select函数…

和鲸全程支持:第二届粤港澳大湾区(黄埔)国际算法算例大赛初赛赛程圆满收官!

随着新一轮科技革命与产业变革的加速演进&#xff0c;算法&#xff0c;作为一种战略性的科技、生产要素&#xff0c;已成为推动数字技术与实体经济深度融合的核心支撑。为助力地区大数据与人工智能算法的生态体系建设、赋能社会经济的高质量发展&#xff0c;琶洲实验室&#xf…

如何与LEONI建立EDI连接?

莱尼LEONI是一家为汽车及其他行业提供能源数据管理产品、解决方案及服务的全球供应商。供应链范围从研发生产标准化电缆、特种电缆和数据电缆到高度复杂的布线系统和相关组件。本文将介绍如何与莱尼LEONI建立EDI连接。 什么是EDI&#xff1f; EDI全称Electronic Data Interch…

C# WPF上位机开发(乘法计算小软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 上面一篇文章&#xff0c;我们简单了解了怎么用xaml来设计界面。和传统的c# form不一样&#xff0c;它除了可以通过拖拽的方法来实现界面的编写之外…

各种排序算法

1.Arrays.sort---默认升序 //降序排序 Integer a[] {6,9,9}; Arrays.sort(a, Collections.reverseOrder()); for (int i 0; i < a.length; i) {System.out.print(a[i]); } 2.直接插入排序 ① 从第一个元素开始&#xff0c;该元素可以认为已经被排序 ② 取出下一个元素&…

基于SSM的云鑫曦科技办公自动化管理系统设计与实现

基于SSM的云鑫曦科技办公自动化管理系统设计与实现 摘 要: 随着时代的发展&#xff0c;单位办公方式逐渐从传统的线下纸张办公转向了使用个人pc的线上办公&#xff0c;办公效率低下的传统纸质化办公时代的淘汰&#xff0c;转型到信息化办公时代&#xff0c;面对当今数据逐渐膨…

python每日一题——13最大子数组和

题目 用python做题&#xff0c;给出详细的解题思路和代码注释&#xff1a;给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。子数组是数组中的一个连续部分。 示例 1&#xf…

灰度发布专题---5、API网关灰度发布

API网关灰度发布 前面说到Dubbo灰度发布&#xff0c;那网关代理层如何实现灰度发布呢&#xff0c;在网关层实现灰度发布&#xff0c;我们可以采用2种方式实现&#xff0c;分别是权重和灰度规则配置。在这之前我们先了解下Gateway的源码&#xff0c;更利于后面灰度分析。 Gate…

笔记-PC端wireshark采集FPGA数据的操作

wireshark采集FPGA的数据 目录 一、准备工作二、操作步骤 一、准备工作 1、软件&#xff1a;wireshark 2、平台&#xff1a;PC&#xff08;本人是win11&#xff09;、带有以太网功能的zynq平台 3、网线: 用网线连接zynq板子和PC的以太口端口 二、操作步骤 1、打开任务管理器…

android开发:安卓13Wifi和热点查看与设置功能

近日对安卓热点功能做了一些技术验证&#xff0c;目的是想利用手机开热点给设备做初始化&#xff0c;用的是安卓13&#xff0c;简言之&#xff1a; 热点设置功能不可用&#xff0c;不可设置SSID和密码&#xff0c;不可程序控制开启关闭&#xff0c;网上的代码统统都过时了Loca…

JVM执行引擎

目录 &#xff08;一&#xff09;执行引擎概述 &#xff08;二&#xff09;Java代码编译和执行过程 &#xff08;三&#xff09;机器码&#xff0c;指令&#xff0c;汇编语言&#xff0c;字节码 1、机器码 2、指令 3、指令集 4、汇编 5、字节码 &#xff08;四&#x…

在Visual Studio Code中安装加速TypeScript程序开发的插件

在Visual Studio Code中安装加速TypeScript程序开发的插件 Install Extensions on Visual Studio Code for TypeScript Application Development By Jackson 2023-11-28 众所周知&#xff0c;微软的Visual Studio Code是一款轻量级、功能强大的集成开发环境。它支持各种编程语…

linux CentOS MobaXterm 通过X11 Forwarding 在本地开启图形可视化窗口

第一步 操作系统安装图形界面 X11 Forwarding dnf install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Type1 xclock第二步 修改参数&#xff0c;启用X11 Forwarding vim /etc/ssh/sshd_config修改参数X11Forwarding yes和X11UseLocalhost no #Al…

C/C++---------------LeetCode第35. 搜索插入位置

插入的位置 题目及要求二分查找在main内使用 题目及要求 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: …

AIGC系列之:GroundingDNIO原理解读及在Stable Diffusion中使用

目录 1.前言 2.方法概括 3.算法介绍 3.1图像-文本特征提取与增强 3.2基于文本引导的目标检测 3.3跨模态解码器 3.4文本prompt特征提取 4.应用场景 4.1结合生成模型完成目标区域生成 4.2结合stable diffusion完成图像编辑 4.3结合分割模型完成任意图像分割 1.前言 …