分离的DOM树内存泄漏

时间:2018-04-30 00:19:44

标签: javascript html angular google-chrome memory-leaks

我发现我的应用程序有内存泄漏,我认为它是由分离的DOM树引起的。我以前没有真正尝试修复内存泄漏,所以我有一些问题。

我已经对我的应用程序进行了堆快照,并通过搜索了分离的类过滤器:enter image description here

  1. 一些分离的树有0个保留大小,但是当我打开它们时,我可以看到具有一些保留大小的元素。我应该担心这些吗?
  2. 我有一段时间拍摄了5张快照。我注意到所有这些都出现了一些分离的树,但每个快照的保留大小都有所增加,而在后面的快照中,我从“分离的”类过滤器中获得了更多的结果。这让我相信我发现了泄漏。我已经读过用黄色突出显示的节点有对它们的直接javascript引用,而用红色突出显示的节点没有,但它们是黄色节点树的一部分。

    1. 我没有发现任何黄色节点,但我的堆快照中有大量的红色。怎么来,我该如何处理它们?
    2. 我注意到很多突出显示为红色的节点从HTML代码中引用HTMLImageElements就像这样(我在3个不同的HTML文件中有完全相同的代码):

          <div class="O2-copd-flex">
            <div class="O2">
              <p>
                <img draggable="false" [matTooltip]="translations?.Tooltip.O2" (click)="toggleO2(bed)" [src]="bed.additional_O2 ? medO2 : noO2">
              </p>
              ...
      

      我还有许多Text个节点突出显示为红色。我检查了其中一个,它说该节点的下一个兄弟是img,它的父亲是p,其父级是div,类O2。换句话说,该文本应放在上面HTML中的<p>开始标记和<img>开始标记之间,但正如您所看到的,没有文字。这可能是由matToolTip引起的,但我不确定。

      1. 你知道为什么这个HTML代码会导致问题吗?代码是为数组中的每个对象创建的,每隔x秒我就会更新一次,清除数组并向其中添加新对象。因此,HTML元素会被删除并不时地重新创建。
      2. 非常感谢任何帮助。谢谢!

0 个答案:

没有答案