JS setInterval()mem泄漏

时间:2017-03-24 12:58:55

标签: 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();

1 个答案:

答案 0 :(得分:2)

您使用重复调用updateTime的{​​{1}}以递归方式调用setInterval函数。从方法中删除updateTime调用并调用它。

setInterval()