为什么这个javascript刷新泄漏内存?

时间:2015-05-07 18:06:35

标签: javascript jquery html memory-leaks

我的电视上有一个仪表板,页面需要每秒刷新一次。

在页面底部,我有:

function startRefresh() {
    $.get('', function(data) {
        var newDoc = document.open("text/html", "replace");
        newDoc.write(data);
        newDoc.close();
    });
}
$(function() {
    setTimeout(startRefresh,1000);
});

这很有效,除了每个页面加载导致内存使用量增加chrome://memory-redirect/报告。

有没有办法解决这个问题?我不想为DIV创建一个单独的页面,只是重新加载该部分。

FYI http标头刷新和document.location = document.location都产生了无法使用的闪烁

2 个答案:

答案 0 :(得分:1)

如果您使用Chrome,则应使用"时间轴"记录内存使用情况。启动时间轴,然后等待页面刷新几次,然后停止时间轴并查看结果。如果你看到线路保持增加,这意味着你的内存(或DOM节点)中的对象永远不会被释放并被垃圾收集。

我自己从未使用document.open/write所以我不知道这是否会导致垃圾收集问题,但我怀疑它是否存在。

如果您使用时间轴清楚地检测到记忆延迟,则打开"个人资料"选项卡并在页面重新加载之前和之后拍摄热门快照,然后使用"比较"看看有什么变化,你的记忆影响有多大。例如,如果您的旧编译代码(或obejct引用)仍然存在,加上新的代码,则说明您的泄漏。

答案 1 :(得分:0)

您是否尝试过location.reload()

function startRefresh() {
    location.reload();
}
$(function() {
    setTimeout(startRefresh,1000);
});
编辑:在重新阅读问题之后,我意识到你并没有要求替代方法,而是对内存泄漏的解释(我没有)。