javascript - JS setInterval() 内存泄漏

标签 javascript memory-leaks setinterval

我知道这里有一堆关于这个问题的问题和答案,但我不知道它是否真的适用于我的案例。

我有一个时间脚本,带有setInterval函数。最初几分钟工作正常,但随后在 chrome/opera 任务管理器中,我看到该脚本运行的选项卡从 40mb 变为 2-3gb!这太疯狂了,我不知道如何解决这个问题。仅当以不同的方式重写所有脚本时。

脚本:

function checkTime(i) {
    return (i < 10) ? "0" + i : i;
};

function calcTime(city, offset) {
    d = new Date();
    utc = d.getTime() + (d.getTimezoneOffset() * 60000);
    nd = new Date(utc + (3600000*offset)),
        h = checkTime(nd.getHours()),
        m = checkTime(nd.getMinutes()),
        s = checkTime(nd.getSeconds());
    return nd.toLocaleString();
};

function updateTime() {
    if (document.getElementById('timeMoscow')) {
        calcTime('Moscow', '+3');
        document.getElementById('timeMoscow').innerHTML = h + ":" + m /*+ ":" + s*/;
    }
    if (document.getElementById('timeKiev')) {
        calcTime('Kiev', '+2');
        document.getElementById('timeKiev').innerHTML = h + ":" + m /*+ ":" + s*/;
    } else 
    if (document.getElementById('timeAstana')) {
        calcTime('Astana', '+6');
        document.getElementById('timeAstana').innerHTML = h + ":" + m /*+ ":" + s*/;
    }
    if (document.getElementById('timeNewYork')) {
        calcTime('NewYork', '-4');
        document.getElementById('timeNewYork').innerHTML = h + ":" + m /*+ ":" + s*/;
    }
    setInterval(updateTime, 500); //Problem
}

updateTime();

最佳答案

您正在递归调用 updateTime 函数,该函数使用 setInterval 重复调用 updateTime。从方法中删除 setInterval() 调用并像这样调用它。

function updateTime() {
    //You rest of code
}

setInterval(updateTime, 500); 

关于javascript - JS setInterval() 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43000154/

相关文章:

javascript - 将 MMM YY 字符串转换为日期 javascript

objective-c - NSUserDefaults 和 NSMutableArray 的内存泄漏

JavaScript - jQuery 区间

javascript - 来自另一个选项卡时,Jquery setInterval 太快

javascript - 当 "open"属性设置为 "true"时,@material-ui/core 的 DRAWER 组件不会出现

java - 单击图像的一部分即可找到匹配的图像

javascript - FullCalendar PHP 和 MySQL 集成,事件不更新

java - 如何摆脱“Activity 已泄漏服务连接”错误

c# - ConditionalWeakTable 的值会导致内存泄漏吗?

javascript - 如何清除JQuery中重复设置的setInterval函数