js 有清除缓存的方法么

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

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

5448 次点击
所在节点    程序员
78 条回复
ImmerTry
2022-04-28 22:49:00 +08:00
遇到和题主一样的问题
Osk
2022-04-28 22:49:21 +08:00
不想动太多就向楼上的那样给 url 加 hash, 浏览器就会重新请求新文件了
gamexg
2022-04-28 23:05:56 +08:00
在根目录建立不同版本的不同路径
即把原来这样的 url http://www.abc.com/web1.html 改为 http://www.abc.com/版本号 /web1.html 或 改为 http://版本号.www.abc.com/web1.html
登录页面跳转到最新版本地址。
gamexg
2022-04-28 23:12:42 +08:00
另外,Service Workers 可能也能实现需求,印象这个可以拦截自身网站的请求并修改。
rekulas
2022-04-28 23:30:05 +08:00
还可以把资源文件单独放个域名,相当于内部简陋版 cdn,通过 etag 等 header 进行缓存管控,你就可以随意控制缓存了,比如代码发布后自动更新清除缓存
lk920724
2022-04-29 00:40:20 +08:00
学习一下其他做法,mark~
yuzo555
2022-04-29 01:01:56 +08:00
标准的做法是通过 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-04-29 01:09:37 +08:00
每次更新后生成的 js 都用 hash 命名,只更改 index.html 引用的 js 文件名,这样就能够保证用户使用的 js 要么全是旧版的,要么全是新版的,你只要更新一个 index.html 就行了
Zy143L
2022-04-29 02:00:29 +08:00
+ hash 加版本号 这都是老生常谈的问题了
mozhizhu
2022-04-29 02:42:43 +08:00
没打开之前,就知道一定有 alert <_<
dartabe
2022-04-29 02:48:19 +08:00
Mark. 看来 no-cache 并不是什么好方案
yunye
2022-04-29 02:51:34 +08:00
前端获取当前时间戳,然后拼接一下 xxx.js?ver=时间戳
IvanLi127
2022-04-29 08:31:56 +08:00
如果你打开 devtools 勾选了禁用缓存能正常工作,那么加 no-cache 是一个有效且改动很小的方案。如果能在 nginx 上改的话,几乎稳得一批
superfatboy
2022-04-29 08:47:23 +08:00
修改一下 ,服务端 配置不就完事了,完全不缓存,内容部用的系统也没事
ImmerTry
2022-04-29 09:04:29 +08:00
@superfatboy 是像楼上那样 在 nginx 上做改动吗
superfatboy
2022-04-29 09:14:05 +08:00
@ImmerTry 差不多,详细的配置,上网搜下就有
unco020511
2022-04-29 09:18:25 +08:00
后面加上版本号呀
bzw875
2022-04-29 09:29:06 +08:00
js 做不到,在 http 可以设置 Cache-Control 、ETag 、Expires 、Last-modified 。在前端构建工具( webpack 、rollup )给 js 和 css ,图片加上文件哈希前缀比如 uhu43824f.js
PEAL
2022-04-29 09:32:49 +08:00
@bzw875 曾经我以为这样子就完全可以了,直到遇到了一个国企的 APP 端网页,死缓存,只能在系统清除该 APP 缓存才能清除
liyunyang
2022-04-29 09:33:49 +08:00
公司有一样的问题,up 有解决方案的时候 @一下我,233333

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

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

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

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

© 2021 V2EX