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,也不知道为什么会这样;只是一个观察(:
这些年来,当涉及到事件侦听器时,我一直意识到要清理自己。
当你不使用 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,也不知道为什么会这样;只是一个观察(: