项目场景:
正在维护一个稳定的售后系统,使用的是React框架,日常进行一些功能优化,隔一周迭代一个版本
问题描述
每次发版 之后,会有少部分用户出现白屏 的情况(感受一下),需要清除浏览器缓存,开无痕浏览或者重新加载才能正常访问
原因分析:
React打包生成的js文件名是哈希值 ,跟上次生成的文件名不重复。而index.html被缓存 ,对不上指向的js文件,所以页面没有渲染出来。index.html 被缓存有以下可能:
1.服务器缓存了入口文件index.html
打包生成的文件中,index.html文件名与上次相同,所以没有将原来的覆盖,服务器中的index.html没有被更新,这种情况下所有用户访问都会出现白屏。
由于只有少部分用户出现白屏的情况,可以确认不是服务器缓存了入口文件。
2.客户端(浏览器缓存机制)强缓存了index.html文件
强缓存导致客户端请求首页的时候,不经过服务器,直接读取缓存或者硬盘的index.html,发布生产后,服务器的js文件更新,而客户端的index.html中指向的js还是旧版,对应不上,导致页面渲染不成功白屏。 如图,由于浏览器的缓存机制,index.html请求没有经过服务器,直接走disk-cache,不管怎么刷新都没有办法获取最新的资源。
解决方案:
1.(前端)设置meta标签属性,禁止缓存
打包后的index.html已经存在这些配置,需要寻找其他解决方法
2.时间戳区分
不太科学
2.服务器配置
location = /index.html {
add_header Cache-Control "no-cache, no-store";
}
服务器配置http协议头控制缓存 有关浏览器缓存机制参考: https://blog.csdn.net/qq_46658751/article/details/123433335
|