Angular、Observables 和垃圾收集?

Angular, Observables and Garbage Collection?

这些年来,当涉及到事件侦听器时,我一直意识到要清理自己。

当你不使用 first()takeX() 等情况时,我应该在 Angular 世界中做什么。例如,考虑一个永远持续的表单控件.

this.myControl.valueChanges.subscribe((value) => {
    console.log(value);
});

让我们假设我现在已经完成了表格并想继续。

我是否需要将每个像这样的可观察对象分配给 Subscription 属性,就像我需要使用 addEventListener 的引用一样,这样我以后可以 [=16] =]?

如果有我需要关心和不需要关心的情况,是否有很好的解释?

完成后您应该退订。例如:

ngOnInit() {
  this.sub = this.something$.subscribe(value => console.log(value));
}

ngOnDestroy() {
  this.sub.unsubscribe();
}

您可以利用 async 自动取消订阅的管道。

<p>{{ something$ |async }}</p>

在这种情况下,您不必 subscribe/unsubscribe 手动。

垃圾回收

我刚才做了一些测试(不确定这是否仍然相关),但我注意到当 subscription() 只是一个空函数时,浏览器会更快释放内存。例如,如果您查看 Chrome 的任务管理器内存使用情况并且不取消订阅:

this.something$.subscribe(value => console.log(value));    
this.something$.do(value => console.log(value)).subscribe();

第二种情况的内存使用率会下降,第一种情况不会。不确定这是不是 feature/bug/other,也不知道为什么会这样;只是一个观察(: