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

标签 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 header 刷新和 document.location = document.location 都产生了无法使用的闪烁

最佳答案

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

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

如果您使用时间轴清楚地检测到内存不足,请打开“配置文件”选项卡并在页面重新加载前后拍摄 Heat 快照,然后使用“比较”查看发生了什么变化以及您的内存影响有多大是。例如,如果您的旧编译代码(或对象引用)仍然存在,加上新代码,那么它解释了您的泄漏。

关于javascript - 为什么这个 javascript 会刷新内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30108588/

相关文章:

javascript - 当动画父幻灯片移入视口(viewport)时,如何为嵌套内容设置动画,而不是使用滚动

javascript - 为每个()元素运行一个函数,该元素按 Id 排序,而不是 dom 位置

css - 如何使 Css 顺应图像

javascript - 检查哪个元素在另一个元素之前的函数

javascript - 从回调函数中获取变量值

jquery - 将焦点放在悬停 jquery 上的隐藏元素上

jquery - jQuery 加载中不显示重音

javascript - 删除最后一次出现字符之前的所有内容

javascript - 防止 body 在鼠标滚轮上滚动,但不是文本区域

javascript - 在 jQuery 中用递增的 id 包裹嵌套的 <div> 元素