Firefox对JS文件存在过度缓存问题,如何解决?
兄弟,我太懂你开发时遇到这种缓存问题的闹心了!明明服务器端的JS已经更新了,curl能拿到最新内容,Firefox却抱着旧缓存不放,太耽误事了。结合你的情况,给你几个实用的解决办法:
强制刷新页面:别用普通的F5刷新,试试快捷键
Ctrl+Shift+R(Windows/Linux)或者Cmd+Shift+R(Mac),这个是强制绕过本地缓存,让浏览器重新从服务器拉取所有资源,包括JS文件。普通刷新可能还是会优先用缓存,这个才是彻底刷新。开发时临时禁用缓存:打开Firefox的开发者工具(按F12就行),点击右上角的齿轮图标进入设置,找到“网络”相关的选项,勾选「禁用缓存(当开发者工具打开时)」。只要工具开着,Firefox就不会缓存任何资源,你改完JS刷新页面就能看到最新效果,非常适合开发过程中用。
调整服务器的缓存响应头:既然服务器返回的内容是对的,那可以给JS文件设置更严格的缓存控制头,让浏览器每次都去服务器验证资源是否更新。比如在服务器配置里给JS文件加上:
Cache-Control: no-cache, no-store, must-revalidate Expires: 0这样浏览器就不会直接用本地缓存,每次都会请求服务器确认,开发环境下这么设置特别管用,生产环境再调整成合适的缓存策略就行。
给JS文件加版本/哈希后缀:把你的
script.js改成script.v1.js,下次更新就改成script.v2.js,或者用构建工具自动生成哈希值比如script.abc123.js。浏览器会把带新后缀的文件当成全新资源,直接请求最新版本,完全绕开缓存。很多前端构建工具都支持自动加哈希,开发时手动加个临时版本号也能快速测试。手动清除顽固缓存:如果上面的方法都不管用,那就手动清一下Firefox的缓存。路径是:菜单→设置→隐私与安全→清除数据,勾选「缓存的Web内容」然后清除。不过这个比较麻烦,一般前面的方法就能解决,除非缓存特别顽固才用这个。
备注:内容来源于stack exchange,提问作者spraff

