我的电视上有一个仪表板,该页面需要每秒刷新一次。
在页面底部我有:
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/