项目场景:
这次遇到的问题是浏览器长时间没有进行操作,导致页面卡死,但是强制刷新之后恢复正常。
问题描述
因为后端设置的token过期时间是24h,所以很长时间页面都不会重新请求,这次出现问题打开控制台发现,
找不到js,查看打包之后的文件发现并没有该名字的js文件,令人想破头脑也想不出这个文件哪里来的,
本来以为是打包文件丢失,因为我得路由确实是动态导入的,但是刷新之后是可以正常运行的啊,所以应该不是这个问题。,就询问另一个前端是否每次打开都会随机命名某些js文件,有可能是使用的vue框架或者是element-plus引用的js文件。
原因分析:
经过查询得知:果然,浏览器安全性考虑,长时间不操作会删除某些js文件,也就是说那些文件的名称也是随机命名的。
给出了以下几种解决方案:
-
页面刷新:可以使用JavaScript定时检查用户的操作,如果用户有一段时间没有进行任何操作,则定期刷新页面。
-
心跳检测:可以通过发送小的Ajax请求到服务器来维持会话活跃状态。
-
服务器端Session设置:可以增加Session的超时时间,或者使用其他机制来维持用户会话状态。
-
使用本地存储:可以使用localStorage或sessionStorage来存储用户的状态,并在页面加载时恢复状态。
-
WebSocket:如果需要更实时的交互,可以使用WebSocket来保持连接,而不是依赖于轮询或者Ajax。
最后我采取了第2种方法:心跳检测
解决方案:
setInterval(()=>{
GetLanguageFields() // 定时请求 防止页面卡死
},60*60000)```