Angular 中 RxJS 订阅的生命周期
Lifecycle of RxJS subscription in Angular
在我读过的关于 Angular observables 的一些教程和文档中,我看到了很多关于取消订阅失败如何导致内存泄漏的警告(除非使用异步管道在组件的模板中)。
我在创建自定义可观察对象的应用程序中得到了一些支持 classes,但我想知道如果可观察对象和所有订阅者都超出范围,取消订阅它们是否重要。例如,我有一个 parent class,其中包含数组中 child object 的映射。
parent 为其每个 children 订阅一个可观察对象以检测 "value" 属性 中的变化,并且 parent 重新计算它的 'total' 属性 每当 child 更改其值时。
然后说 parent object 超出范围,通常 parent 和所有 children 只要没有实时引用就会被垃圾收集到任何child人都在闲逛。 parent 是否需要取消订阅每个 child 更改订阅才能发布订阅?或者当订阅者或观察到的 object 超出范围时,订阅本身是否会被垃圾收集?还是活动订阅本身会保持 parent 存活,从而使所有 children 存活?
是的,您需要取消订阅值更改。
在 angular 中,HttpModule 是唯一一个你不必取消订阅的模块,因为它在 http 请求完成后取消订阅(在 httpModule 中)
一旦源 Observable
被垃圾回收,所有订阅回调也会被回收,回调引用的所有对象也会被回收,因此不存在真正的风险。 Angular 的所有 Observables 都有自己的生命周期,不再需要时会被销毁(HttpClient
、路由参数、守卫、解析器等),因此无需担心 unsubscribe
当你 subscribe
到 Angular 的 Observable
.
危险的 Observables 是那些你创建但你没有正确管理生命周期的 Observables,它们可以永远存在,并且可以引用引用对象(如组件)的回调。您可以在此处找到有关如何发生内存泄漏的更多信息:
在我读过的关于 Angular observables 的一些教程和文档中,我看到了很多关于取消订阅失败如何导致内存泄漏的警告(除非使用异步管道在组件的模板中)。
我在创建自定义可观察对象的应用程序中得到了一些支持 classes,但我想知道如果可观察对象和所有订阅者都超出范围,取消订阅它们是否重要。例如,我有一个 parent class,其中包含数组中 child object 的映射。 parent 为其每个 children 订阅一个可观察对象以检测 "value" 属性 中的变化,并且 parent 重新计算它的 'total' 属性 每当 child 更改其值时。
然后说 parent object 超出范围,通常 parent 和所有 children 只要没有实时引用就会被垃圾收集到任何child人都在闲逛。 parent 是否需要取消订阅每个 child 更改订阅才能发布订阅?或者当订阅者或观察到的 object 超出范围时,订阅本身是否会被垃圾收集?还是活动订阅本身会保持 parent 存活,从而使所有 children 存活?
是的,您需要取消订阅值更改。 在 angular 中,HttpModule 是唯一一个你不必取消订阅的模块,因为它在 http 请求完成后取消订阅(在 httpModule 中)
一旦源 Observable
被垃圾回收,所有订阅回调也会被回收,回调引用的所有对象也会被回收,因此不存在真正的风险。 Angular 的所有 Observables 都有自己的生命周期,不再需要时会被销毁(HttpClient
、路由参数、守卫、解析器等),因此无需担心 unsubscribe
当你 subscribe
到 Angular 的 Observable
.
危险的 Observables 是那些你创建但你没有正确管理生命周期的 Observables,它们可以永远存在,并且可以引用引用对象(如组件)的回调。您可以在此处找到有关如何发生内存泄漏的更多信息: