vite:配置打包后js的文件名,解决更新后浏览器缓存问题(了解浏览器的强缓存与协商缓存)

目录

第一章 简单理解浏览器的缓存机制

1.1 什么是缓存

1.2 强缓存

1.3 协商缓存

第二章 配置输出js文件名

2.1 原因

2.2 配置代码


第一章 简单理解浏览器的缓存机制

1.1 什么是缓存

  • 当我们第一次访问网站的时候,我们的电脑会把网站上的图片和数据下载到电脑上,当我们再次访问该网站的时候,网站就会从电脑中直接加载出来,这就是缓存。
  • 缓存的优点:
  1. 缓解服务器压力,不用每次都去请求某些数据了。(减载)
  2. 提升性能,打开本地资源肯定会比请求服务器来的快。(加速)
  3. 减少带宽消耗,当我们使用缓存时,只会产生很小的网络消耗,节约宽带。(省钱)
  • 缓存的缺点:

  1. 占内存(有些缓存会被存到内存中,这也是为什么我们现在的内存越来越多的原因)

1.2 强缓存

  • 浏览器再次访问某个资源时会判断是否使用本地缓存里已经存在的资源文件使用本地缓存的话则不会发送请求到服务器,从而达到减轻服务器访问压力的作用,且由于直接从本地缓存读取资源文件,大大提高了加载速度。首次访问时,服务器希望浏览器得到该资源后一段时间内不要再发送请求过来,会在响应头返回响应的信息,从而让浏览器资源缓存到本地。

1.3 协商缓存

  • 当浏览器再次请求资源时,服务器会对比浏览器请求携带的值,如果对比后发现没有变化,则返回304,继续使用缓存的资源;否则返回200以及最新的资源文件给浏览器使用并缓存。

第二章 配置输出js文件名

2.1 原因

  • 需要配置打包后的js文件名需要变化是因为小编的一个项目语音转文字的功能bug修改打包上线后一个不能使用,但是当把浏览器缓存清除了之后就能使用了;说明项目上线后由于原来的项目的资源还被缓存在手机的文件夹中,浏览器请求资源发现文件资源的名字什么的都没有发生变化,于是浏览器触发强缓存机制,从本地获取资源,导致新的资源并没有获取到;但是小编又不能要求每一个客户都需要清一下缓存再使用。所以只能修改打包后的资源名,让浏览器没有检测到本地有资源,从而重新下载使用最新的资源并缓存,从而实现用户不需要手动清除缓存也能使用修改后的功能。

2.2 配置代码

  • ​在vite.config.js中配置(可以使用时间戳/hash实现) —— 代码如下(output配置项下):
 
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'const timeStamp = new Date().getTime() // 添加时间戳export default ({ mode }) =>defineConfig({plugins: [vue()],base: './', // 基本公共路径build: {// 设置打包后文件的名称outDir: 'wisdom-backend',// 默认情况下,若 outDir 在 root 目录下,则 Vite 会在构建时清空该目录。emptyOutDir: true,// 启用/禁用 reportCompressedSize 压缩大小报告reportCompressedSize: true,// chunks 大小限制chunkSizeWarningLimit: 2000,minify: 'terser',// 删除文件中console、debugger等调试用的多余代码terserOptions: {compress: {drop_console: true,drop_debugger: true}},// 自定义底层的 Rollup 打包配置rollupOptions: {output: {// 将静态文件进行分类存放 并添加时间戳 每次打包文件资源不同chunkFileNames: `static/js/[name]-[hash].${timeStamp}.js`,entryFileNames: `static/js/[name]-[hash].${timeStamp}.js`,assetFileNames: `static/[ext]/[name]-[hash].${timeStamp}.[ext]`,// 静态资源分拆打包manualChunks(id) {if (id.includes('node_modules')) {return id.toString().split('node_modules/')[1].split('/')[0].toString()}}}}})});

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

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

相关文章

如何优雅地使用 console.log 打印数组或对象

一、背景 使用 console.log 在控制台中打印数组或者对象时,很多时候它们的字段都是默认关闭的,需要手动一个个的点开,非常不直观且麻烦。 二、解决方案 使用 JSON.stringify() 的第三个参数 我们来看一下官方对于 JSON.stringify 的介绍 三、…

Gitee 的公钥删不掉

公钥管理里已经没有公钥了, 仓库里还有,这是怎么回事? 这两个好像又没什么关系。 那为啥要搞两处呢? 个人信息里的公钥一直就没有仓库里使用的公钥, 删掉个人信息里的也没什么影响。 在仓库管理页面导入新公钥提示已…

AI 大模型企业应用实战(06)-初识LangChain

LLM大模型与AI应用的粘合剂。 1 langchain是什么以及发展过程 LangChain是一个开源框架,旨在简化使用大型语言模型构建端到端应用程序的过程,也是ReAct(reasonact)论文的落地实现。 2022年10月25日开源 54K star 种子轮一周1000万美金,A轮2…

解决vscode运行js时突然报错

1. 问题背景 创建JavaScript文件运行,弹出错误:Can’t find Node.js binary “node”: path does not exist. Make sure Node.js is installed and in your PATH, or set the “runtimeExecutable” in your launch.json 这是由于没有配置好setting.js…

C语言入门系列:从内存原理看函数的值传递和引用传递

文章目录 一,值传递二,引用传递三,从内存原理看值传递和引用传递的区别1 值传递内存示意图2 引用传递内存示意图 参考文献 函数参数用于向函数传递数据,C语言支持两种传递方式:值传递和引用传递。 一,值传递…

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库,以加强Java应用程序处理和渲染CAD图纸,而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose AP…

Synchronized、volatile与ReentrantLock:比较这些同步机制在Java并发编程中的应用和区别

在Java并发编程中,确保多个线程安全地访问共享资源是至关重要的。为实现这一目标,Java提供了多种同步机制,其中synchronized、volatile和ReentrantLock是最常用的几种。下面,我们将从技术难点、面试官关注点、回答吸引力以及代码举…

如何用家政服务小程序源码系统 快速搭建家政自己接单的软件?

随着移动互联网的快速发展,线上预约服务已成为家政行业的新趋势。然而,许多家政企业面临着信息不透明、服务质量参差不齐、管理效率低下等问题。家政服务小程序系统,可以帮助商家快速搭建自己的接单软件,提升服务效率,…

嵌入式学习——Linux操作系统——文件编程练习

1.使用fread和fwrite方式完成任意普通文件的拷贝功能。 模拟 文件下载 #include <stdio.h>void do_copy(FILE *fp_s,FILE *fp_d) {char buf[100] {0};int ret;while (ret fread(buf,sizeof(char),sizeof(buf),fp_s))fwrite(buf,sizeof(char),ret,fp_d); }//./a.out sr…

开源网安参编的《代码大模型安全风险防范能力要求及评估方法》发布

​代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时&#xff0c;也带来了对安全风险防范能力的挑战。基于此&#xff0c;中国信通院依托中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;联合开源…

深圳比创达|EMC电磁兼容性行业:电子设备质量的“守门员”

随着科技的不断进步和电子产品的普及&#xff0c;电磁兼容性&#xff08;EMC&#xff09;问题愈发受到行业内外的高度关注。EMC作为衡量电子设备在电磁环境中能否正常工作的重要指标&#xff0c;对于保障设备稳定运行、减少电磁干扰、提升产品质量具有重要意义。 一、EMC电磁兼…

水产养殖监测系统解决方案有哪几部分

随着科技的不断进步&#xff0c;水产养殖行业也迎来了智能化、信息化的新时代。在这一背景下&#xff0c;水产养殖监测系统解决方案应运而生&#xff0c;为养殖企业提供了科学、高效的管理工具。 一、系统概述 水产养殖监测系统是通过现代传感技术、数据分析技术以及互联网通信…

微信小程序(跳转)

在微信小程序中&#xff0c;常用的跳转方式包括以下几种 1.页面跳转 可以使用wx.navigateTo、wx.redirectTo和wx.reLaunch方法实现页面的跳转。 wx.navigateTo&#xff1a;保留当前页面&#xff0c;跳转到应用内的某个页面。wx.redirectTo&#xff1a;关闭当前页面&#xff…

【每日一题】503. 下一个更大元素 II

思路&#xff08;c&#xff09; 使用单调栈的解法&#xff0c;单调栈里面存的是大于当前元素的index&#xff0c;不是直接存值。但是这个题目是一个循环数组&#xff0c;可以在后面补一段前面的内容&#xff0c;这样就可以正常遍历。将每个位置对应的结果存在map中 后面循环…

mysql的语句查询顺序、耗时分析以及查询调优技巧

在MySQL中&#xff0c;SQL查询语句的执行顺序、耗时分析以及查询调优是优化数据库性能的重要方面。以下是关于这些方面的详细解释。 1. SQL查询语句的执行顺序 虽然我们编写SQL语句的顺序通常是 SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -…

前后端分离后灰度发布实现方式

1、什么是灰度发布 灰度发布, 也叫金丝雀发布。是指在黑与白之间&#xff0c;能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式&#xff0c;让一部分用户继续用A&#xff0c;一部分用户开始用B&#xff0c;如果用户对B没有什么反对意见&#xff0c;那么逐步扩大范围&…

MySQL 教程

MySQL 教程 目录 简介安装 MySQL WindowsmacOSLinux 连接 MySQL 命令行客户端图形化工具 基础操作 创建数据库删除数据库选择数据库 表的操作 创建表删除表插入数据查询数据更新数据删除数据 高级操作 索引视图存储过程触发器 用户管理 创建用户授权删除用户 备份与恢复 备份…

Vatee万腾平台:技术引领,智能先行

在科技日新月异的今天&#xff0c;智能技术正以前所未有的速度改变着我们的世界。在众多科技平台中&#xff0c;Vatee万腾平台凭借其卓越的技术实力和前瞻性的战略眼光&#xff0c;成为了智能技术领域的佼佼者。它始终坚持“技术引领&#xff0c;智能先行”的理念&#xff0c;推…

如何在 Odoo 17 库存模块中进行质量控制

质量控制是确保制造产品质量符合最终要求的关键步骤。有效的质量控制能够提高客户满意度。在生产过程中,质量检测可以在多个环节进行,以便及时发现并解决问题。不同的行业采用的质量控制技术可能有所不同。 在商业尤其是制造业中,保证产品质量至关重要。一个产品需要经过多次…

【科技前沿】电子设计新贵SmartEDA:为何它引领行业风潮?

在当今这个电子科技日新月异的时代&#xff0c;电子设计工具如同设计师的魔法棒&#xff0c;不断推动着产品创新的速度。而近期&#xff0c;一款名为SmartEDA的电子国产设计仿真软件异军突起&#xff0c;成为了行业内的新宠。那么&#xff0c;SmartEDA究竟有何过人之处&#xf…