angular - 分离的 DOM 树内存泄漏角度
问题描述
我的应用程序中存在内存泄漏问题,希望你们能提供帮助。检查问题后,我得出的结论是它是由以下代码引起的:
我有几个 html 文件,ngFor
用于为数组中的每个对象创建一些 html 代码:
<div class="patient-box level-1" *ngFor="let bed of beds">
more html..
</div>
在组件中,我订阅了一个 observable,它时不时地发出一个新数组:
updateBeds(purge: boolean) {
this._beds.next(this.bedsData);
}
这就是我收到新数组时发生的情况:
this.patientService.beds.subscribe(updatedBeds => {
this.beds = updatedBeds;
this.sortBeds(this.sortProperty);
});
我认为这里发生的情况是,当我为beds
数组分配一个新引用时,删除了其中的所有 html 代码ngFor
,然后将为来自 observable 的更新数组中的对象创建新的 html 代码。
问题是当更新到达时被删除的 html 代码似乎没有被垃圾收集。在一段时间内拍摄多个堆快照后,我看到越来越多的分离 DOM 树,其中一些不断增加其保留大小。我在快照中没有看到任何以黄色突出显示的节点,但我有很多红色节点。
我不知道这是否与它有关,但我特别注意到以下代码中有很多红色HTMLInputElement
和HTMLImageElement
节点ngFor
:
<p>
<img draggable="false" [matTooltip]="translations?.Tooltip.O2" (click)="toggleO2(bed)" [src]="bed.additional_O2 ? medO2 : noO2">
</p>
<input class="jump-button" [matTooltip]="translations?.Tooltip.Jump2" type="image" src="../../assets/images/Jump_1-2.png" (click)="moveBed(bed, 2)">
我现在真的不知道该怎么办。任何帮助深表感谢。谢谢!
解决方案
推荐阅读
- aws-step-functions - 如何在没有 Lambda 的情况下通过 EventBridge 事件触发 SendTaskSuccess?
- python - 如何在 Django 中生成包含 5 位数字的唯一 ID
- grails - 语义分析期间的一般错误:不支持的类文件主要版本 60
- javascript - 如何向特定频道 Discord.js 发送消息
- npm - 无法为 Hardhat 项目安装软件包
- pandas - Python pandas 'lookup' 已弃用并将被删除。如何更改代码?
- shell - 在shell脚本中的字符串中查找子字符串不起作用
- highcharts - 在 Highchart 甘特图中 highcharts-point 我如何创建自定义形状
- yammer - 无法在 MS 团队中获取 yammer 的当前用户组
- node.js - 数据操作(可视化前清理数据集) - Node.js