js 有清除缓存的方法么

2022 年 4 月 28 日
 helee9199

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

6677 次点击
所在节点    程序员
78 条回复
ImmerTry
2022 年 4 月 28 日
遇到和题主一样的问题
Osk
2022 年 4 月 28 日
不想动太多就向楼上的那样给 url 加 hash, 浏览器就会重新请求新文件了
gamexg
2022 年 4 月 28 日
在根目录建立不同版本的不同路径
即把原来这样的 url http://www.abc.com/web1.html 改为 http://www.abc.com/版本号 /web1.html 或 改为 http://版本号.www.abc.com/web1.html
登录页面跳转到最新版本地址。
gamexg
2022 年 4 月 28 日
另外,Service Workers 可能也能实现需求,印象这个可以拦截自身网站的请求并修改。
rekulas
2022 年 4 月 28 日
还可以把资源文件单独放个域名,相当于内部简陋版 cdn,通过 etag 等 header 进行缓存管控,你就可以随意控制缓存了,比如代码发布后自动更新清除缓存
lk920724
2022 年 4 月 29 日
学习一下其他做法,mark~
yuzo555
2022 年 4 月 29 日
标准的做法是通过 Cache-Control: max-age=600 来控制浏览器缓存一个文件的时间,600 是秒数;
或者不在乎服务器压力的话直接 Cache-Control: no-cache 不缓存;

但是如果客户端比较多样化,有些垃圾浏览器很可能是只判断后缀不遵守这个规则的。
最灵活的方式还是直接在网页代码里加 URL 参数 queryString ,例如 a.js?ver=202204290056 ,每次更新用 ver 记录版本号或者更新时间,这样浏览器就不会读旧缓存。

上面说的 ETag 或者 Last-Modified ,不符合楼主这个场景,这俩是要 [等到浏览器认为缓存过期了] ,然后去服务器请求,服务端判断客户端请求头里的 If-None-Match 或者 If-Modified-Since ,如果服务器认为客户端的版本不需要更新,可以直接返回一个 304 Not Modified ,节省传输流量用的。
ch2
2022 年 4 月 29 日
每次更新后生成的 js 都用 hash 命名,只更改 index.html 引用的 js 文件名,这样就能够保证用户使用的 js 要么全是旧版的,要么全是新版的,你只要更新一个 index.html 就行了
Zy143L
2022 年 4 月 29 日
+ hash 加版本号 这都是老生常谈的问题了
mozhizhu
2022 年 4 月 29 日
没打开之前,就知道一定有 alert <_<
dartabe
2022 年 4 月 29 日
Mark. 看来 no-cache 并不是什么好方案
yunye
2022 年 4 月 29 日
前端获取当前时间戳,然后拼接一下 xxx.js?ver=时间戳
IvanLi127
2022 年 4 月 29 日
如果你打开 devtools 勾选了禁用缓存能正常工作,那么加 no-cache 是一个有效且改动很小的方案。如果能在 nginx 上改的话,几乎稳得一批
superfatboy
2022 年 4 月 29 日
修改一下 ,服务端 配置不就完事了,完全不缓存,内容部用的系统也没事
ImmerTry
2022 年 4 月 29 日
@superfatboy 是像楼上那样 在 nginx 上做改动吗
superfatboy
2022 年 4 月 29 日
@ImmerTry 差不多,详细的配置,上网搜下就有
unco020511
2022 年 4 月 29 日
后面加上版本号呀
bzw875
2022 年 4 月 29 日
js 做不到,在 http 可以设置 Cache-Control 、ETag 、Expires 、Last-modified 。在前端构建工具( webpack 、rollup )给 js 和 css ,图片加上文件哈希前缀比如 uhu43824f.js
PEAL
2022 年 4 月 29 日
@bzw875 曾经我以为这样子就完全可以了,直到遇到了一个国企的 APP 端网页,死缓存,只能在系统清除该 APP 缓存才能清除
liyunyang
2022 年 4 月 29 日
公司有一样的问题,up 有解决方案的时候 @一下我,233333

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

https://v2ex.xtra.eu.org/t/849873

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

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

© 2021 V2EX