setinterval定时器内存泄漏问题?

现在在做一个大盘,每30s请求一次数据导致每次请求数据的时候看任务管理器内存,本来是谷歌浏览器内存600MB -> 700MB, 过了几秒又跳到670MB,但每次都会增加70MB,如果页面不关过半个钟电脑就内存不足了,请求这种怎么解决?

现在我目前的写法是在请求数据的时候去清除定时器,请求完数据后开启定时器。

阅读 2.7k
2 个回答

你的这种思路可以呀 如果用的是vue这种框架记得在销毁的回调(beforeDestroy)里清除掉定时器 如果不用框架记得在页面隐藏时清除定时器:

document.addEventListener("visibilitychange", () => {
    if (document.hidden) {
        // 清除定时任务
    } else {
        // 开启定时任务
    }
});

当然也可以试试换成setTimeOut来实现:

var timeoutBox;//timeout定时器存储器
function startTimeout() {
    clearTimeout(timeoutBox);//初始化timeout定时器,防止定时器重叠
    timeoutBox = setTimeout(function(){
        console.log(timeoutBox);//做任务
        startTimeout();//循环调用函数自身,以达到循环的效果
    }, 1000);
}

检查代码逻辑是否有重复启动 setInterval,或者是改用 setTimeout 实现。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题