vue3封装而成的APP ,在版本更新后,页面显示空白
一、问题展示
更新之后页面空白,打不开 ,主要是由于缓存造成的
二、解决办法
1、随机数代码实现
使用随机数来动态的生成静态资源目录名可以避免浏览器缓存,但同时每次也会导致浏览器每次都下载最新的资源。如果静态资源过大,可能会影响加载速度。vite.config.js文件
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import path, { resolve } from "path";
import postCssPxToRem from "postcss-pxtorem";// 获取当前时间戳或随机数
const randomNum = Math.random().toString(36).substring(2, 8); // 随机数:生成一个6位的随机字符串// https://vitejs.dev/config/
export default defineConfig({server: {host: "0.0.0.0",port: 8080,open: true,},base: "./",plugins: [vue()],resolve: {//别名配置,引用src路径下的东西可以通过@如:import Layout from '@/layout/index.vue'alias: [{find: "@",replacement: resolve(__dirname, "src"),},],},css: {postcss: {plugins: [postCssPxToRem({rootValue: 128, // 1rem,根据 设计稿宽度/10 进行设置propList: ["*"], // 需要转换的属性,这里选择全部都进行转换}),],},},build: {outDir: "dist", // 指定输出文件assetsDir: `static/${Math.random()}`, // 动态生成目录,保证唯一性rollupOptions: {output: {chunkFileNames: "static/js/[name]-[hash].js",entryFileNames: "static/js/[name]-[hash].js",assetFileNames(assetInfo) {if (assetInfo.name.endsWith(".css")) {return "static/css/[name]-[hash].[ext]";}// 针对图片文件类型做分类if (["png", "jpg", "jpeg", "gif", "svg", "PNG", "JPG"].some((ext) =>assetInfo.name.endsWith(ext))) {// 如果图片文件路径包含 'img' 或 'icons' 等关键字,则根据不同类型分类if (assetInfo.name.includes("icon") || assetInfo.name.includes("icons")) {return "static/icons/[name]-[hash].[ext]";}if (assetInfo.name.includes("img") || assetInfo.name.includes("imgs")) {return "static/img/[name]-[hash].[ext]";}return "static/img/[name]-[hash].[ext]"; // 默认图片文件夹}// 针对字体文件夹if (["ttf", "woff", "woff2"].some((ext) =>assetInfo.name.endsWith(ext))) {return "static/fonts/[name]-[hash].[ext]";}// 默认处理其他资源return "static/css/[name]-[hash].[ext]";},},},},
});
2、实现过程
randomNum:首先会生成一个随机数
assetDir:使用模板字符串讲randomNum插入到assetsDir配置项中。每次构建时,都会生成一个新的目录名
chainWebpack:WebPack的chainWebpack API允许你在构建时Webpack配置进行细粒度的控制。虽然此时我们不需要对其他部分进行更复杂的配置,但他可以为以后的构建提供灵活的定制
三、原理
1、解释说明
浏览器缓存的目的时为了提高访问速度,避免重复下载相同的资源。当静态资源没有变化时,浏览器会根据url中的文件名,文件路径和资源的http缓存策略来决定是否从缓存中加载资源。
而使用随机数的主要原理时通过改变静态资源的路径,强制浏览器每次都去请求最新的资源 (因为路径变了,浏览器就会变化使用缓存中的旧资源了,每次都会下载新的资源)
(1)优点
避免缓存问题,对于经常更新的资源(js、css等),可以确保浏览器总是加载最新的文件,避免了由于浏览器缓存问题导致的用户看到旧版本的情况
控制缓存,你可以通过改变文件路径的方式来主动控制缓存的失效时机,不需要依赖服务器的缓存策略
(2)缺点
每次都请求最新资源,增加了请求次数,增加了网络带宽消耗,潜在的性能问题
四、其他
1、内容哈希实现(优解)
许多构建工具(如 Webpack、Vite 等)提供了内容哈希的功能。你可以在文件名中添加文件内容的哈希值,这样只有当文件内容发生变化时,文件名才会发生变化。这样就可以避免缓存问题,并且只有文件内容更新时才重新下载资源。
部分代码实现
// vite.config.js
export default {build: {rollupOptions: {output: {assetFileNames: '[name].[hash].[ext]', // 文件名中包含哈希值}}}
}
2、不是缓存导致的问题更新版本出现白屏
可以检查别的情况,有可能时路由错误导致找不到页面,路由重定向回到首页
{path: '/:pathMatch(.*)*', // 处理所有未匹配的路由name: 'NotFound',redirect: '/home'}
或者你请求数据的token不对,都可能导致
相关文章:

vue3封装而成的APP ,在版本更新后,页面显示空白
一、问题展示 更新之后页面空白,打不开 ,主要是由于缓存造成的 二、解决办法 1、随机数代码实现 使用随机数来动态的生成静态资源目录名可以避免浏览器缓存,但同时每次也会导致浏览器每次都下载最新的资源。如果静态资源过大,可…...

GEE云计算、多源遥感、高光谱遥感技术蓝碳储量估算;红树林植被指数计算及提取
大气温室气体浓度不断增加,导致气候变暖加剧,随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物(特别是红树林、盐沼和海草&…...

【知识】cuda检测GPU是否支持P2P通信及一些注意事项
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 代码流程 先检查所有GPU之间是否支持P2P通信;然后尝试启用GPU之间的P2P通信;再次检查所有GPU之间是否支持P2P通信。 test.cu&…...

用 Python 生成功能强大的二维码工具(支持自定义颜色与 Logo)
在很多项目中,二维码作为一种便捷的方式传递信息越来越常见。今天,我们将介绍如何用 Python 编写一个功能更全的二维码生成工具,它不仅支持自定义二维码的颜色,还能在二维码中间添加 logo。 1. 环境准备 首先,我们需…...
RTX5 数据队列传输流程
1、首先获取当前内存是否有值 rptr = (net_mpool_t*)osMemoryPoolAlloc(id_mp_net,0U); 说明:通过相同的key,可以操作值。 2、设值到队列中 如果有值,则将rptr变量的值放入消息队列id_mp_net rptr->len = USART2_RxBfr[0]+1;memcpy (rptr->Recvbuf, &USART2_Rx…...
24.try块怎么用 C#例子
这是一个用英语写的try-catch例子 简单来说就是一个try,try里面的代码可能会出错,然后有两个catch,规定了具体的错误是什么 如果发生相应的错误,就会把错误信息存到err里,err.Message是一个字符串格式的提示信息&…...

【机器学习 | 数据挖掘】智能推荐算法
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…...

120.【C语言】数据结构之快速排序(详解Hoare排序算法)
目录 1.Hoare单趟排序思想 2.单趟排序代码 初次写的代码 运行结果 查找问题原因 尝试解决问题 初次修正后代码 运行结果 正确的单趟排序代码 3.将单趟排序嵌入 如何递归? 递归结束的条件 1.较容易分析的结束条件:leftright 2.以{2,1}为例分析另一个结束条件 完整…...

uniapp通过v-if进行判断时,会出现闪屏?【已解决】
1.问题:按钮切换时,通过v-if来判断,会出现闪烁情况,影响用户体验 2.v-if 闪烁问题可能的原因 条件切换频繁:如果 v-if 指令的条件在短时间内频繁切换,会导致元素不断被销毁和重新创建,从而…...
各种网站(学习资源、常用工具及其他,持续更新中~)
欢迎围观笔者的个人博客~ 也欢迎通过RSS网址https://kangaroogao.github.io/atom.xml进行订阅~ 大学指南 上海交通大学生存手册中国科学技术大学人工智能与数据科学学院本科进阶指南USTC不完全入学指南大学生活质量指北科研论 信息搜集 AI信息搜集USTC飞跃网站计算机保研 技…...
网络技术-QoS策略以及如何定义 流分类,流行为,流策略
一:QoS策略简介 QoS策略由如下部分组成: 类,定义了对报文进行识别的规则。 流行为,定义了一组针对类识别后的报文所做的QoS动作。 通过将类和流行为关联起来,QoS策略可对符合分类规则的报文执行流行为中定义的…...
线程晨考day20
1.线程的五种状态 创建 就绪 运行 阻塞 死亡 2.创建线程的两种方式 继承Thread类 重写run方法 实现Runnable接口 重写run方法 3.调用start和调用run方法的区别 调用start方法表示会开启新的线程 run方法不会开启新的线程 4.线程调度常用的方法 sleep() join() yield() 5.进程和…...
【ES6复习笔记】迭代器(10)
什么是迭代器? 迭代器(Iterator)是一种对象,它能够遍历并访问一个集合中的元素。在 JavaScript 中,迭代器提供了一种统一的方式来处理各种集合,如数组、字符串、Map、Set 等。通过迭代器,我们可…...

MySQL的TIMESTAMP类型字段非空和默认值属性的影响
同事说他通过某款商业数据同步软件将一个 MySQL 5.7.28 的库同步到 MySQL 5.7.20 的库时,如果表中含有 TIMESTAMP 数据类型、缺省值为 current_timestamp 的字段,这些表的同步任务就都失败了,而另外的一些包含了 DATETIME 数据类型的表就同步…...

【Linux进程】初悉进程
学习编程就得循环渐进,扎实基础,勿在浮沙筑高台 循环渐进Forward-CSDN博客 进程调度简介 1.2进程查看命令 1.3进程的几个要素 二、进程的生命周期 2.1进程状态文字描述 2.2进程状态的切换 2.3task_struct数据结构 2.4进程优先级 ⑴优先级的代…...

Python学习之路(5)— 使用C扩展
Python学习之路(5)— 使用C扩展 一、前言 参考:https://www.cnblogs.com/yinguo/p/4641349.html Python C扩展是指用C语言编写的代码,然后编译成Python可以调用的库。这样可以提高Python代码的执行效率,或者实现某些…...

动态规划34:446. 等差数列划分 II - 子序列
动态规划解题步骤: 1.确定状态表示:dp[i]是什么 2.确定状态转移方程:dp[i]等于什么 3.初始化:确保状态转移方程不越界 4.确定填表顺序:根据状态转移方程即可确定填表顺序 5.确定返回值 题目链接:446.…...

PPT画图——如何设置导致图片为600dpi
winr,输入regedit打开注册表 按路径找,HKEY_CURRENT_USER\Software\Microsoft\Office\XX.0\PowerPoint\Options(xx为版本号,16.0 or 15.0或则其他)。名称命名:ExportBitmapResolution 保存即可,…...

【模块系列】STM321.69TFT屏幕
前言 在翻翻自己的器件盒的时候,发现这块好久之前买的TFT屏了,想起还没有用STM32点亮过,手头上正好有立创的梁山派STM32F4,就试着按照网上的文章教程顺便移植个LVGL看看,然后就有了就本文。 代码工程命名的是LvglDemo&…...

大模型辅助测试的正确打开方式?
测试的基本目的之一,是对被测对象进行质量评估。换言之,是要提供关于被测对象质量的“确定性”。因此,我们很忌讳在测试设计中引入“不确定性”,比如采用不可靠的测试工具、自动化测试代码逻辑复杂易错、测试选择假设过于主观等等…...

MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...