我目前注意到我和我的团队正在开发的平台中存在内存泄漏,我尝试了以下方法:
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:如果有人需要更多细节,请在评论中提及,以便我提供更多信息。