(本文档仅供参考)
问题:
平常在部署一些扩展包的时候,即使是使用新的扩展包了,但是还是旧扩展包或者是未部署扩展包时的逻辑,需要清空浏览器缓存或者使用无痕窗口访问才可以有对应的效果,这种现象就通常就是由于前端JS未更新,仍然从缓存获取导致。如何可以不用用户手动从前端清空浏览器缓存,统一服务器端更新处理呢?
原理说明:
1、JS交互:
使用 jsloader 方式按需加载JS文件,jsloader 也是封装了请求gbk.jsp?name=jsname&xxx=***
2、对应JS 请求的URL中会有一个t的参数值,对应时间会取所有version.txt中的最新值(包含smartbi.war与所有扩展包的version.txt的时间),若扩展包更新前后对应JS文件的URL不变,则会从缓存中加载文件。
如下图中的场景,旧扩展包打包日期为2020-12-18,新扩展包打包日期为2024-09-18,产品打包时间为2024-09-19。
(1)即t中的参数值,扩展包更新前后取最新日期,获取到的都是smartbi.war的2024-09-19,扩展包更新前后URL都不变,这种情况下就会出现js缓存不更新的情况。
解决方案:
1、更新扩展包的时间为最新的时间,使得JS文件请求URL发生变化,不从缓存中加载。
扩展包的version.txt路径:对应扩展包压缩软件打开/META-INF/version.txt
2、注意事项:理论上都是先对产品打包,然后才对新扩展包打包,保证新扩展包的打包时间比产品打包时间新,避免更新扩展包时,浏览器使用gbk.jsp请求js文件时URL相同导致更新扩展包后js还是旧代码。