2017-04-20 70 views
1

這些年來,我一直意識到自己對事件聽衆的清理。角度,觀察物和垃圾收集?

在角度世界裏,當你不使用first()takeX()等等的情況下,我應該怎麼做。例如,考慮一個永遠持續下去的表單控件。

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

讓我們假設我現在已經完成了我的表單並且想繼續前進。

我需要每一個可觀察到的這樣分配給Subscription財產,我需要一個addEventListener,所以我可以在以後removeEventListener參考以同樣的方式?

如果出現了我不需要關心的情況,那麼對此有沒有很好的解釋?

回答

3

當您完成後,您應該取消訂閱。例如:

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個的情況下,而不是針對第一種情況。不確定這是否是功能/錯誤/其他,以及它爲什麼發生;只是一個觀察(: