角度,观察物和垃圾收集?
问题描述:
这些年来,我一直意识到自己对事件听众的清理。角度,观察物和垃圾收集?
在角度世界里,当你不使用first()
或takeX()
等等的情况下,我应该怎么做。例如,考虑一个永远持续下去的表单控件。
this.myControl.valueChanges.subscribe((value) => {
console.log(value);
});
让我们假设我现在已经完成了我的表单并且想继续前进。
我需要每一个可观察到的这样分配给Subscription
财产,我需要一个addEventListener
,所以我可以在以后removeEventListener
参考以同样的方式?
如果出现了我不需要关心的情况,那么对此有没有很好的解释?
答
当您完成后,您应该取消订阅。例如:
ngOnInit() {
this.sub = this.something$.subscribe(value => console.log(value));
}
ngOnDestroy() {
this.sub.unsubscribe();
}
您可以async
管,它会自动退订的优势。
<p>{{ something$ |async }}</p>
在这种情况下,您不必手动订阅/取消订阅。
垃圾收集
我做了一些测试前一段时间(不知道这仍然是相关的),但我注意到,当subscription()
只是一个空的功能,浏览器释放内存越快。例如,如果你看一下Chrome的任务管理器内存使用和不退订:
this.something$.subscribe(value => console.log(value));
this.something$.do(value => console.log(value)).subscribe();
内存使用量将下降为第2个的情况下,而不是针对第一种情况。不确定这是否是功能/错误/其他,以及它为什么发生;只是一个观察(: