当前位置: 首页 > news >正文

day1:前端缓存问题

「目标」: 持续输出!每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。篇幅不会过长,方便理解和记忆。

「主要面向群体:」前端开发工程师(初、中、高级)、应届、转行、培训等同学

Day1-今日话题

「前端web项目缓存问题如何处理?」

项目版本更新后,在不进行手动刷新的前提下,再次打开网页,发现还是上一次的版本。如何实现用户无需手动刷新便就能看到最新版本的内容?(「手动刷新和重新打开网页的区别」见下文拓展)

成因

这种情况通常是由于浏览器缓存机制引起的。浏览器为了提高页面加载速度和减少服务器负载,会将一些资源(如样式、脚本、图像等)缓存到本地。这意味着当网页更新时,浏览器可能仍然加载之前缓存的旧版本资源,导致看到的是旧的页面内容。以下是一些可能导致这种情况的原因:

  1. 「缓存控制头部不正确:」 如果服务器没有正确设置缓存控制头部(如 Cache-Control 和 Expires),浏览器可能会根据过期时间来决定何时重新请求资源。如果过期时间设置得过长,浏览器可能会继续使用缓存的资源。

  2. 「浏览器本地缓存」: 浏览器会在本地存储缓存的资源,即使服务器上的资源已经更新。浏览器可以根据缓存策略决定是否使用本地缓存,而不是向服务器重新请求。

  3. 「资源 URL 没有变化」: 如果资源 URL 没有发生变化(文件名没变),浏览器可能会认为资源没有更新,因此继续使用缓存的版本。

  4. 「代理服务器的缓存」: 如果网页在代理服务器后面,代理服务器可能会缓存资源,导致更新不及时。

  5. 「使用 Service Worker」: 如果使用了 Service Worker 技术,它也可能缓存资源并在离线情况下提供内容。在这种情况下,需要正确配置 Service Worker 来确保它在资源更新时更新缓存。

解决

  1. 「更改资源链接的URL参数」 在资源(如样式表、脚本或图像)的URL中添加一个不同的参数(版本号或时间戳),这会让浏览器认为链接是一个新的资源,从而强制重新下载。例如,将链接从 styles.css 修改为 styles.css?v=2,其中 v=2 是一个随机值或者资源版本号。

  2. 「使用meta标签」 在HTML文档的部分中,你可以添加一个meta标签来控制浏览器的缓存行为,这些meta标签的组合会告诉浏览器不要缓存页面内容。以下是一个例子:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
  1. 「版本化文件名」 在每次更新资源时,将资源的文件名修改为新的版本号。例如,从 styles-v1.css 更新为 styles-v2.css。这样做会迫使浏览器下载新版本的资源,而不使用之前的缓存。

  2. 「修改HTTP头部:」 服务器端可以通过修改HTTP响应头部来影响浏览器的缓存行为。常见的响应头部包括Cache-Control和Expires。通过设置适当的值,可以告诉浏览器不要缓存特定资源或页面。例如,在服务器端设置以下HTTP头部,可以禁止浏览器缓存:

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
  1. 「使用服务端技术:」 如果有服务器端的控制权,可以通过更改资源URL或响应头来实现缓存控制。服务器端的缓存控制可以更精确地管理资源的缓存策略。

拓展

手动刷新和重新打开页面的区别

  1. 重新打开页面: 重新打开页面意味着关闭当前浏览器选项卡或窗口,然后再次打开一个新的选项卡或窗口,输入网址或通过书签进入页面。在重新打开页面时,浏览器会尝试使用缓存的资源来加速页面加载,因此可能会看到之前加载过的资源。这是因为浏览器默认会尽量避免重新下载已缓存的资源,以提高页面加载速度。

  2. 手动刷新: 手动刷新意味着您点击浏览器的刷新按钮或使用快捷键(如 F5 或 Ctrl+R)。这会告诉浏览器强制重新加载页面,并且会忽略缓存,从服务器重新获取所有资源。手动刷新通常用于测试新的更改、修复缓存问题或确保加载最新版本的资源。

「关键区别:」

  1. 重新打开页面可能使用缓存的资源,导致您看到之前版本的内容。
  2. 手动刷新会忽略缓存,确保您加载的是最新版本的资源和内容。

本文由 mdnice 多平台发布

相关文章:

day1:前端缓存问题

❝ 「目标」: 持续输出&#xff01;每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。篇幅不会过长&#xff0c;方便理解和记忆。 ❞ ❝ 「主要面向群体&#xff1a;」前端开发工程师&#xff08;初、中、高级&#xff09;、应届、转行、培训等同学 ❞ Day…...

学习网络编程No.4【socket编程实战】

引言 北京时间&#xff1a;2023/8/19/23:01&#xff0c;耍了好几天&#xff0c;主要归咎于《我欲封天》这本小说&#xff0c;听了几个晚上之后逐渐入门&#xff0c;在闲暇时间又看了一下&#xff0c;小高潮直接来临&#xff0c;最终在三个昼夜下追完了&#xff0c;哈哈哈&…...

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 四)

Observed装饰器和ObjectLink装饰器&#xff1a;嵌套类对象属性变化 上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数…...

arcgis--坐标系

1、arcgis中&#xff0c;投影坐标系的y坐标一定是7位数&#xff0c;X坐标有两种&#xff1a;6位和8位。 6位&#xff1a;省略带号&#xff0c;这是中央经线形式的投影坐标&#xff0c;一般投影坐标中会带CM字样&#xff1b;8位&#xff1a;包括带号&#xff0c;一般投影坐标中…...

LFS学习系列 第5章. 编译交叉工具链(1)

5.1 介绍 本章介绍如何构建交叉编译器及其相关工具。尽管这里的交叉编译是“伪造”、“假装”的&#xff0c;但其原理与真正的交叉工具链相同。 本章中编译的程序将安装在$LFS/tools目录下&#xff0c;以使它们与以下章节中安装的文件分离。而另一方面&#xff0c;库被安装到…...

网络互联与互联网 - TCP 协议详解

文章目录 1 概述2 TCP 传输控制协议2.1 报文格式2.2 三次握手&#xff0c;建立连接2.3 四次挥手&#xff0c;释放连接 3 扩展3.1 实验演示3.2 网工软考 1 概述 在 TCP/IP 协议簇 中有两个传输协议 TCP&#xff1a;Transmission Control Protocol&#xff0c;传输控制协议&…...

开源在线图片设计器,支持PSD解析、AI抠图等,基于Puppeteer生成图片

Github 开源地址: palxiao/poster-design 项目速览 git clone https://github.com/palxiao/poster-design.git cd poster-design npm run prepared # 快捷安装依赖指令 npm run serve # 本地运行将同时运行前端界面与图片生成服务(3000与7001端口)&#xff0c;合成图片时…...

在Linux系统上安装和配置Redis数据库,无需公网IP即可实现远程连接的详细解析

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 Redis作为一款高速缓存的key value键值对的数据库,在…...

跨平台图表:ChartDirector for .NET 7.1 Crack

什么是新的 ChartDirector for .NET 7.0 支持跨平台使用&#xff0c;但仅限于 .NET 6。这是因为在 .NET 7 中&#xff0c;Microsoft 停止了用于非 Windows 使用的 .NET 图形库 System.Drawing.Common。由于 ChartDirector for .NET 7.0 依赖于该库&#xff0c;因此它不再支持 .…...

【unity数据持久化】XML数据管理器知识点

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…...

Linux——Shell常用运算符

运算符说明举例-eq检测两个数是否相等&#xff0c;相等返回 true。[ $a -eq $b ] 返回 false。-ne检测两个数是否不相等&#xff0c;不相等返回 true。[ $a -ne $b ] 返回 true。-gt检测左边的数是否大于右边的&#xff0c;如果是&#xff0c;则返回 true。[ $a -gt $b ] 返回 …...

C++(4)C++内存管理和命名空间

内存管理 new/delete C语言 malloc free完成对堆内存的申请和释放。 C new delete 类 new&#xff1a;动态申请存储空间的运算符&#xff0c;返回值为申请空间的对应数据类型的地址 int *p new int(10); 申请了一个初始值为10的整型数据 int *p new int[10]; 申…...

一网打尽java注解-克隆-面向对象设计原则-设计模式

文章目录 注解内置注解元注解 对象克隆为什么要克隆&#xff1f;如何克隆浅克隆深克隆 Java设计模式什么是设计模式&#xff1f;为什么要学习设计模式&#xff1f; 建模语言类接口类之间的关系依赖关系关联关系聚合关系组合关系继承关系实现关系 面向对象设计原则单一职责开闭原…...

k8s-statefulset部署myql-Nodeport方式

目录 1、部署openebs&#xff08;Elastic Block Store&#xff09; 1.下载镜像&#xff08;针对k8s1.19&#xff09; 2.加载镜像&#xff08;所有节点包括master&#xff09; 3.下载yaml文件并部署 4.设置默认storageclass 2、编写相关yaml文件 1.编写secret 2.编写state…...

MySQL双主架构、主从架构

为什么要对数据库做优化&#xff1f; MySQL官方说法&#xff1a; 单表2000万数据就达到瓶颈了。所以为了保证查询效率&#xff0c;要让每张表的大小得到控制。 MySQL主主架构 主数据库都负责增删改查。 比如有1000W的数据&#xff0c;有两个主数据库&#xff0c;就将数据分流给…...

基于微信小程序的物流管理系统3txar

在此基础上&#xff0c;结合现有物流管理体系的特点&#xff0c;运用新技术&#xff0c;构建了以 springboot为基础的物流信息化管理体系。首先&#xff0c;以需求为依据&#xff0c;对目前传统物流管理基础业务进行了较为详尽的了解和分析。根据需求分析结果进行了系统的设计&…...

Maven 一键部署到 SSH 服务器

简介 利用 Maven Mojo 功能一键部署 jar 包或 war 包到远程服务器上。 配置 在 maven 的setting.xml 配置服务器 SSH 账号密码。虽然可以在工程的 pom.xml 直接配置&#xff0c;但那样不太安全。 <servers><server><id>iq</id><configuration&…...

docker搭建owncloud,Harbor,构建镜像

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 拉取镜像 docker pull owncloud docker pull mysql:5.6 2、安装搭建私有仓库 Harbor 1.下载docker-compose 2.安装harbor 3.编辑 harbor.yml文件 使用./intall.sh安装 4.登录 3、编写Dockerfile制作Web应用系…...

RISC-V(1)——RISC-V是什么,有什么用

目录 1. RISC-V是什么 2. RISC-V指令集 3. RISC-V特权架构 4. RiscV的寄存器描述 5. 指令 5.1 算数运算—add/sub/addi/mul/div/rem 5.2 逻辑运算—and/andi/or/ori/xor/xori 5.3 位移运算—sll/slli/srl/srli/sra/srai 5.4 数据传输—lb/lh/lw/lbu/lhu/lwu/sb/sh/sw …...

基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码

基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.黄金正弦优化BP神经网络2.1 BP神经网络参数设置2.2 黄金正弦算法应用 4.测试结果&#xff1a;5…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式&#xff08;本地调用&#xff09; SSE模式&#xff08;远程调用&#xff09; 4. 注册工具提…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...

嵌入式面试常问问题

以下内容面向嵌入式/系统方向的初学者与面试备考者,全面梳理了以下几大板块,并在每个板块末尾列出常见的面试问答思路,帮助你既能夯实基础,又能应对面试挑战。 一、TCP/IP 协议 1.1 TCP/IP 五层模型概述 链路层(Link Layer) 包括网卡驱动、以太网、Wi‑Fi、PPP 等。负责…...