1

我目前注意到我和我的团队正在开发的平台中存在内存泄漏,我尝试了以下方法:

1-在 ngFor 循环中添加了 TrackBy()。

2-尽可能在 ngIf 和 ngFor 上尝试使用异步。

3-在 .subscribe() 之前添加 .TakeUntil() 并在 ngonDestroy() 中添加 x.next(); x.完成();。

4-在 ngOnDestroy() 中添加了 clearTimeout。

5-在 ngOnDestroy() 中添加了无效的所有引用、子项和任何变量,如下所示:this.y = null;。

6-在 .ts 文件中的所有方法上添加了“使用严格”标签(以通知意外的全局变量)。

7-为垃圾收集器添加了“var”而不是“let”,以检测未使用的引用并销毁它们。

8-删除了代码中的所有循环依赖项。

问题:打开页面时 DOM 节点增加

已解决: JS 中的内存泄漏 ~ 已解决

离子信息:

cli包:

@ionic/cli-utils  : 1.19.2
ionic (Ionic CLI) : 3.20.0

全局包:

cordova (Cordova CLI) : 9.0.0 (cordova-lib@9.0.1)

本地包:

@ionic/app-scripts : 3.2.2
Cordova Platforms  : none
Ionic Framework    : ionic-angular 3.9.9

系统:

Node : v8.8.1
npm  : 6.11.3 
OS   : Windows 10

环境变量:

ANDROID_HOME : not set

杂项:

backend : pro

描述:

没有得到任何与 DOM 节点相关的结果。我认为正在清理 JS 堆大小和 JS 侦听器(与 JS 相关的任何内容都没有内存泄漏)。

但是,即使在清理 JS 堆大小时,DOM 节点在打开另一个页面(不是具有历史记录的页面,新页面)时仍在增加,正在调用 ngOnDestroy,但 DOM 节点正在增加。

1-我尝试使用堆快照来检测内存泄漏的位置,但没有到达任何地方()。 截图1在这里截图2在这里

2-我尝试在时间轴上使用分配工具没有到达任何东西。

3-我尝试使用分配采样也没有得到任何东西。

我发现的唯一一件事是,导致 DOM 节点在打开新页面时增加的是分离节点。但在那之后就没有关于如何清除它们的信息了。

假设:

我认为正在发生的事情:

1- 即使当 DOM 节点正在销毁组件并且调用 ngOnDestroy() 时,内存也不会被释放,这意味着 DOM 节点正在增加。

2- ngOnDestroy() 在 DOM 节点销毁组件或页面之后被调用(没有找到任何方法来检查是否在 DOM 节点销毁组件之前或之后调用了 ngOnDestroy())。

谁能帮我这个?或者有什么可以帮助我检测和解决 DOM 节点内存泄漏的问题?

PS:如果有人需要更多细节,请在评论中提及,以便我提供更多信息。

4

0 回答 0