当前位置: 首页 > 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…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件&#xff1a;-&#xff08;纯文本文件&#xff0c;二进制文件&#xff0c;数据格式文件&#xff09; 如文本文件、图片、程序文件等。 目录文件&#xff1a;d&#xff08;directory&#xff09; 用来存放其他文件或子目录。 设备…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...