js 有清除缓存的方法么

2022-04-28 18:24:24 +08:00
 helee9199

医院项目 项目有时修改到 js 后 替换到生产环境 有时有效 有时无效 清理缓存后则会好 但又不太好每次都让 user 清理缓存,他们也不一定会 所以有办法 清理缓存的方法么 目前想的是写到到登录入口 登录成功后就清理缓存 保证每次登录后是没有缓存的

5467 次点击
所在节点    程序员
78 条回复
liyunyang
2022-04-29 09:34:41 +08:00
之前听说 js 后面加版本号,再微信浏览器里面会被过滤?不知道这个说法是否正确
Felldeadbird
2022-04-29 09:39:44 +08:00
楼主没说项目的页面是不是静态页。我假定你全是后端渲染。
1. 不考虑带宽损耗,直接 xxx.js?time=随机值。
2. xxx.js?v=全局版本号变量

如果是静态页.
1. 想办法定期更新静态页的代码。xxx.js?v=带上版本号

如果是打包项目,就从打包源码上解决。每次打包就更新所有 js 的版本号。
kangyan
2022-04-29 09:40:19 +08:00
webpack 打包不是可以加 hash 后缀嘛,OP 的项目不能上 webpack 是吧
davin
2022-04-29 09:58:15 +08:00
强制缓存 vs 协商缓存了解一下
bojackhorseman
2022-04-29 10:01:02 +08:00
@oneisall8955 #7 哈哈哈哈,看到标题我就想到这个
zloong
2022-04-29 10:03:15 +08:00
如果是单页应用,打包后的资源文件都是带 hash 的,所以只要配置服务器不缓存 index.html 就可以了 https://www.jianshu.com/p/5e7d4030254a
serge001
2022-04-29 10:05:07 +08:00
先说一下最佳的实践方案:
将 html 和资源文件分开两个域名部署,html 文件 cache-control:no-cache ;每次访问让浏览器都去请求一次服务器;资源文件每次发布加 hash/版本号,设置强缓存:cache-control:max-age=60000 每次加载资源文件都使用本地缓存

对于你的问题,很明显就是服务器返回的 cache-control 响应头有问题,无脑的解决方案就是设置 cache-control: no-cache ;
tyx1703
2022-04-29 10:08:03 +08:00
@yuzo555 你说错了。no-cache 是忽略本地缓存时间,任然会带上 if-none-match 和 if-modified-since 请求头跟服务端协商。no-store 才是完全忽略本地缓存。
serge001
2022-04-29 10:14:42 +08:00
@tyx1703 协商缓存有什么问题
tyx1703
2022-04-29 10:17:49 +08:00
@serge001 服务端响应 304 的情况下还会采用之前的本地缓存。
DICK23
2022-04-29 10:21:15 +08:00
内网项目,直接 cache-control: no-store 就完事了,再狠点就用打包工具生成 hash
libook
2022-04-29 10:30:33 +08:00
编程有两大难题,第一个是起名字,第二个就是缓存管理。

把代码尽可能移到外部引用的文件里,主页 html 尽可能简单,仅用于引用加载其他文件,然后关闭针对主页 html 的任何缓存,确保每次都从服务器拉最新版本,其他文件加缓存。
每次更新代码,发布的时候都修改其他文件名,比如加一个随机字符串,然后在 html 中引用的时候引用新的文件,这样浏览器加载主页 html 之后,发现需要加载的其他文件跟已经缓存的路径不一样,就重新去拉新文件加载了。

这一套现在有很多前端打包工具可以自动化完成,比如 webpack ,你要是项目不适合引入打包工具自己写一个脚本处理一下也可以。
onionKnight888
2022-04-29 10:33:30 +08:00
ctrl+shift+R
belin520
2022-04-29 10:36:50 +08:00
location / {
root /usr/local/nginx/html;
index index.html;

if ($request_filename ~* ^.*?.(html|htm)$) {
add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
}
}
jydeng
2022-04-29 11:01:50 +08:00
html 禁止缓存 + js 文件名 hash
ImmerTry
2022-04-29 11:25:25 +08:00
@helee9199 OP 是部署到 tomcat 上的吧
serge001
2022-04-29 11:30:01 +08:00
@tyx1703 返回 304 那就是服务端的缓存控制出问题了
rekulas
2022-04-29 12:32:15 +08:00
忽略我上面说的,header 确实没法更新缓存,还是只能加 url
不过突然灵光一闪,如果不嫌麻烦,还可以试试 serviceworker ,相当于在前端搭建了个 CDN 。。
lmshl
2022-04-29 12:33:51 +08:00
你正在访问的这个网站,是这么解决的:
<script src="/assets/ad64c164f9c6f240aa3940ff6ace27be7981f830-combo.js" defer=""></script>
WGNNN
2022-04-29 12:55:52 +08:00
alert("清除缓存成功")

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/849873

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX