技术文摘
怎样使 js 不缓存
2025-01-09 18:21:29 小编
怎样使js不缓存
在网页开发中,JavaScript 缓存有时会给开发者带来困扰,比如更新了 JS 文件内容,页面却依旧加载旧版本。那么,怎样有效避免 JS 缓存呢?
一种常用方法是在 URL 中添加版本参数或时间戳。例如,原本的引用是<script src="example.js"></script>,我们可以修改为<script src="example.js?v=1"></script>。每次对 JS 文件有更新时,将版本号 v 的值递增,如改为 v=2、v=3 等。这能让浏览器认为这是一个全新的资源,从而绕过缓存直接加载最新内容。使用时间戳也是类似原理,<script src="example.js?t=1689834567"></script>,由于时间戳不断变化,浏览器会判定为新资源并重新加载。
利用 HTTP 头信息控制缓存也是不错的选择。在服务器端设置响应头,禁止缓存。以 Node.js 为例,借助 Express 框架,可以这样操作:
const express = require('express');
const app = express();
app.get('/example.js', (req, res) => {
res.set('Cache-Control', 'no-cache, no-store, must-revalidate');
res.set('Pragma', 'no-cache');
res.set('Expires', '0');
res.sendFile(__dirname + '/example.js');
});
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
这段代码通过设置Cache-Control、Pragma和Expires等响应头,告诉浏览器不要缓存该 JS 文件。
对于静态资源管理工具,如 Webpack,也有相应策略。Webpack 可以通过插件对输出的文件名添加哈希值。在配置文件中添加如下内容:
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
output: {
filename: '[name].[contenthash].js',
path: path.resolve(__dirname, 'dist')
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: 'babel-loader'
}
]
},
plugins: [
new MiniCssExtractPlugin({
filename: '[name].[contenthash].css'
})
]
};
这样,每次构建项目时,生成的 JS 文件名都会带有基于文件内容生成的哈希值。只要文件内容改变,哈希值就不同,浏览器就会将其当作新文件加载,有效避免了缓存问题。
通过这些方法,能在不同场景下确保 JS 文件不被缓存,让页面始终加载最新的代码,提升开发效率和用户体验。
- 19 个常用的 JavaScript 数组方法总结 赶紧收藏
- 这款开发工具助程序员告别 996 爆火
- Nginx map 助力时间格式的转换
- 微服务架构中 API 网关的发展趋向深入剖析
- 反驳:放弃 TypeScript 是无知之举
- 从得物 SRE 视角看蓝绿发布
- 轻松搞懂 Kubernetes 编排工具 Minikube
- 我为何更青睐基于主干的开发
- 企业变革管理对供应链困境的缓解作用
- Spring 所支持的数据类型注入详解,你用过哪些?
- JsonPath 详细使用教程:你知晓多少?
- Springboot:以更优雅之姿发送 HTTP 请求(RestTemplate 详解)
- 零拷贝并非全能的数据传输解决方案:重新审视效率极限
- 一个项目中能否混用 Vue 和 React?
- 利用 Docker 打造轻量级 Linux 容器