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 多平台发布

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

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

相关文章

【数据治理】WKC+Minio+Airflow --20230821(链接)

https://blog.csdn.net/m0_46629123/article/details/132413616

docker安装es8.x及elasticSearch8部分api使用

docker中安装es8 1、es8的tar下载地址: tar包下载地址) 2、docker load -i es-name 3、docker run -d --name elasticsearch-8.6.2 -e ES_JAVA_OPTS“-Xms256m -Xmx256m” -p 9200:9200 -p 9300:9300 -e “discovery.typesingle-node” elasticsearch:8.6.2 4、8开始以后不支持…

YOLOv5、v8改进:引入SKAttention注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下SKAttention.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 论文链接&#xff1a;https://arxiv.org/pdf/1903.06586.pdf 最近对卷积神经网络中的“自适应调整感受野”这样的操作很感兴趣&#xff0c;从字面的意思可以理解&…

Spring练习---28 (用户表和角色表分析,角色列表展示,角色层和Dao层的设置,页面展示操作)

84、下面进入我们的业务层面&#xff0c;进入我们的业务层面我们先分析一个东西&#xff0c;我们要分析用户和角色的关系&#xff0c;因为我们只有在分析完用户和角色之间的关系后&#xff0c;我们才知道表的关系&#xff0c;实体的关系 85、现在我们先画一张表&#xff0c;分析…

从FLIR热像仪图像中读取温度和原始照片: Python处理与应用的深入解析

第一部分:FLIR热像仪图像简介与Python环境准备 热像仪是一种可以检测辐射热量的设备,并将其转换为可视图像。FLIR(Forward Looking Infrared)热像仪是市面上的主导品牌之一,被广泛应用于各种场景,例如医学、军事和消费电子产品。其输出的图像不仅仅是我们看到的彩色或灰…

cUrl的介绍和基本使用

cURL 如果你在开发接口的时候&#xff0c;需要调试。那么cUrl将是你必备的技能。也许你用过postman,但这个未免太重量级了。curl将会是你最佳轻量级&#xff0c;调试接口的工具&#x1f600; 1.Curl函数的基本选项✨ 1.1 --request和 -x —request 和 -X 指定与HTTP服务器通信…

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解 一、背景二、环境硬件信息软件信息 三、FE恢复3.1 异常日志3.2 获取当前ip3.3 重置ip信息3.4 重置元数据记录3.5 元数据模式恢复3.6 重置fe集群节点3.7 关闭元数据模式重启fe 四、BE恢复4.1 获取当前ip4.2 重置ip信息4.3 重置be集群节点 一、背景 …

vue3 基础知识

vue3创建一个项目 PS D:\code> npm init vuelatestVue.js - The Progressive JavaScript Framework√ Add TypeScript? ... No / Yes √ Add JSX Support? ... No / Yes √ Add Vue Router for Single Page Application development? ... No / Yes √ Add Pinia for sta…

WordPress用于您的企业网站的优点和缺点

如今&#xff0c;WordPress 被广泛认为是一个可靠、可扩展且安全的平台&#xff0c;能够为商业网站提供支持。然而&#xff0c;许多人质疑 WordPress 是否是适合企业的平台。 这就是我们创建本指南的原因。通过探索 WordPress 的优点和缺点&#xff0c;您可以确定世界上最受欢…

linux部署kafka3.5.1(单机)

一、下载jdk17 kafka3.x版本需要jdk11以上版本才能更好的兼容&#xff0c;jdk11、jdk17都是LTS长期维护版本&#xff0c;而且jdk17支持springboot3.x,所以我选择了openjdk17。 下载地址: Archived OpenJDK GA Releaseshttps://jdk.java.net/archive/ 二、上传jdk安装包解压 …

PHP加密与安全的最佳实践

PHP加密与安全的最佳实践 概述 在当今信息时代&#xff0c;数据安全是非常重要的。对于开发人员而言&#xff0c;掌握加密和安全的最佳实践是必不可少的。PHP作为一种常用的后端开发语言&#xff0c;提供了许多功能强大且易于使用的加密和安全性相关函数和类。本文将介绍一些P…

软件测试-测试策略

版本1 测试策略 目录 版本1​​​​​​​测试策略 版本2测试策略 一、版本分析 测试-----6天 预发----2天 1、XXX业务1 2、XXX业务2 3、XXX业务3 二、测试策略 测试类型分析方向测试目标及用例参考是否需要测试测试结论备注功能测试对比测试用例和策划文档&#xff0c;评估…

【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍

文章目录 1、IoU2、GIoU(Generalized Intersection over Union)3、DIoU4、CIoU 1、IoU IoU为交并比&#xff0c;即对于pred和Ground Truth&#xff1a;交集/并集 1、IoU可以作为评价指标使用&#xff0c;也可以用于构建IoU loss 1 - IoU 缺点&#xff1a; 2、对于pred和GT相…

数据库设计规范

数据库设计&#xff08;Database Design)是指对于一个给定的应用环境&#xff0c;构造最优的数据库模式&#xff0c;建立数据库及其应用系统&#xff0c;使之能够有效地存储数据&#xff0c;满足各种用户的应用需求&#xff08;信息要求和处理要求&#xff09;。 一、数据库设…

Android Studio导入项目需要做的一些配置

点击项目结构 选择本地安装的SDK、NDK目录 选择java版本 重新加载项目 Clean Project Rebuild Project 选择要构建的版本 可选debug和release 打包apk安装包 打包完成&#xff0c;就可以安装到安卓手机了

【2023最新爬虫】用python爬取知乎任意问题下的全部回答

老规矩&#xff0c;先上结果&#xff1a; 爬取了前200多页&#xff0c;每页5条数据&#xff0c;共1000多条回答。&#xff08;程序设置的自动判断结束页&#xff0c;我是手动break的&#xff09; 共爬到13个字段&#xff0c;包含&#xff1a; 问题id,页码,答主昵称,答主性别,…

Restful架构简单了解

Restful Rest全称representational status transfer 表述性状态转移。 原则 资源与URI URI既可以看成是资源的地址&#xff0c;也可以看成是资源的名称。如果某些信息没有使用URI来表示&#xff0c;那它就不能算是一个资源&#xff0c; 只能算是资源的一些信息而已。URI的设计…

无则插入有则更新(PostgreSQL,MySQL,Oracle、SqlServer)

无则插入有则更新 PostgreSQL 无则插入有则更新 conflict(带有唯一性约束的字段)&#xff0c;根据此字段判断是更新还是插入 INSERT INTO student(id,name,sex) VALUES(1, 小明, 男) ON conflict (id) DO UPDATE SET id 1,name 小明,sex 男;无则插入有则不做操作 INSERT I…

Java虚拟机(JVM):堆溢出

一、概念 Java堆溢出&#xff08;Java Heap Overflow&#xff09;是指在Java程序中&#xff0c;当创建对象时&#xff0c;无法分配足够的内存空间来存储对象&#xff0c;导致堆内存溢出的情况。 Java堆是Java虚拟机中用于存储对象的一块内存区域。当程序创建对象时&#xff0c…

Maven之JDK编译问题

IDEA Maven 默认使用 JDK 1.5 编译问题 IDEA 在「调用」maven 时&#xff0c;IDEA 默认都会采用 JDK 1.5 编译&#xff0c;不管你安装的 JDK 版本是 JDK 7 还是 JDK 8 或者更高。这样一来非常不方便&#xff0c;尤其是时不时使用 JDK 7/8 的新特性时。如果使用新特性&#xff…