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

41、当你在 index.html 中引用了一个公共文件(比如 common.js),修改这个文件后,用户访问页面时仍然看到旧内容,因为浏览器缓存了旧版本

浏览器缓存机制

浏览器缓存是一种性能优化手段,它把网页资源(像 HTML、CSS、JavaScript、图片等)存于本地,下次访问相同资源时,若资源未发生变化,浏览器就会直接从本地缓存里读取,而无需再次向服务器请求,这样能减少网络请求,加快页面加载速度。

问题产生原因

在 HTML 文件里引用 JavaScript 或 CSS 文件时,一般会采用如下方式:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><!-- 引用 CSS 文件 --><link rel="stylesheet" href="styles.css">
</head>
<body><!-- 引用 JavaScript 文件 --><script src="script.js"></script>
</body>
</html>

当你对 styles.css 或者 script.js 文件进行修改后,若 HTML 文件里引用的文件名未改变,浏览器会觉得文件没有更新,依旧使用本地缓存的旧版本文件。这是因为浏览器主要依据文件的 URL 来判断文件是否有变化,URL 不变,它就认为文件内容也未变。浏览器会认为文件没有更新,继续使用缓存的旧版本。因此,需要通过某种方式让浏览器知道文件已经更新,从而获取最新版本。

解决方案:强制浏览器加载最新文件

核心思路:让浏览器认为文件是 “新资源”,从而绕过缓存。

方法 1:文件名加时间戳(手动)

在文件路径后面添加当前时间,每次更新文件时时间不同,浏览器就会认为是新文件

<!-- 修改前 -->
<script src="/static/js/common.js"></script><!-- 修改后 -->
<script src="/static/js/common.js?t=202310101530"></script>

实现方式

  • 在代码中动态生成时间戳:
    // 前端代码示例
    const timestamp = Date.now(); // 获取当前时间戳
    
方法 2:构建工具自动加哈希(推荐)

使用 Webpack/Vite 等工具,在打包时自动给文件名添加哈希值(根据文件内容生成),内容变化时哈希值也会变。

// Webpack 配置示例
output: {filename: '[name].[contenthash].js', // 输出文件名带哈希
}

生成结果

<script src="/static/js/common.abc123.js"></script>

加时间戳、版本号或哈希值到文件名或 URL 参数中。


http://www.mrgr.cn/news/96769.html

相关文章:

  • Kafka 4.0入门到熟练
  • 41.C++哈希6(哈希切割/分片/位图/布隆过滤器与海量数据处理场景)
  • ML 聚类算法 dbscan|| OPTICS
  • 【C++】vector常用方法总结
  • Springboot学习笔记3.28
  • JVM——模型分析、回收机制
  • 七. JAVA类和对象(二)
  • 消息中间件对比与选型指南:Kafka、ActiveMQ、RabbitMQ与RocketMQ
  • 前端界面在线excel编辑器 。node编写post接口获取文件流,使用传参替换表格内容展示、前后端一把梭。
  • LLM应用层推荐 -- 基于文档的问答tools Web UI 框架 开源向量库 -- 推荐、对比
  • 003-JMeter发起请求详解
  • Vue中将pdf文件转为图片
  • GitPython库快速应用入门
  • 【超详细】一文解决更新小米澎湃2.0后LSPose失效问题
  • 使用 Less 实现 PC 和移动端样式适配
  • pytorch模型的进阶训练和性能优化
  • uniapp -- 列表垂直方向拖拽drag组件
  • 【橘子大模型】关于PromptTemplate
  • 从 BBRv2 到 BBRv3
  • Windows搭建AI大模型应用开发环境以及踩过的坑