在项目中有时需要使用定时器,去不断刷新数据重载部分页面,长时间使用会导致线程占用和内存泄漏,导致页面卡顿、卡死的现象。网上查找过不少资料,无法根本解决此问题,下面介绍本人实践过的有效方法:
var timerQ = null //首先可以全局定义一个定时器
//清理定时器的公用方法
clearTimerQ(){
try {
window.clearInterval(timerQ)
} catch (error) {}
window.timerQ = null
},
//发送交易获取数据
send_request() {
console.log("开始发送交易")
var that = this
//首先先清除定时器,或在mounted周期清除定时器,并将timerQ重置为null
this.clearTimerQ()
...
//然后在交易成功或完成的函数内,处理交易结果后,再次发送交易刷新页面
success: res => {
timerQ = setInterval(() => {
that.send_request()
}, 1000)
}
...
});
},
//建议在页面加载前和销毁时,都清除一遍定时器,防止内存泄漏解放线程
created(){
this.clearTimerQ()
},
destoryed(){
this.clearTimerQ()
},
这种方法使当前页面始终只有一个定时器在运行,可完美解决上述因长时间使用定时器导致的线程占用和内存泄漏问题,导致页面卡顿、卡死的现象。
最后,原创不易,如本文对您有所帮助,麻烦点个赞谢谢!