Angular RxJS-订阅/取消订阅vs filter()运算符
我有一个旋转器组件,是用角度写的。如果微调器组件处于活动状态,即微调器正在运行,则我需要订阅window.scroll事件以进行一些位置计算 我想知道在spinner运行时总是创建订阅,如果spinner不再运行则取消订阅是否是一个好主意。 或者,如果在组件初始化时创建一次订阅并使用筛选器操作符,在微调器处于活动状态时进入subscribe(),效果更好。当组件被破坏时取消订阅 我当前的实现与过滤器配合使用:Angular RxJS-订阅/取消订阅vs filter()运算符,angular,rxjs,Angular,Rxjs,我有一个旋转器组件,是用角度写的。如果微调器组件处于活动状态,即微调器正在运行,则我需要订阅window.scroll事件以进行一些位置计算 我想知道在spinner运行时总是创建订阅,如果spinner不再运行则取消订阅是否是一个好主意。 或者,如果在组件初始化时创建一次订阅并使用筛选器操作符,在微调器处于活动状态时进入subscribe(),效果更好。当组件被破坏时取消订阅 我当前的实现与过滤器配合使用: this.scroll$ = Observable.fromEvent(window,
this.scroll$ = Observable.fromEvent(window, 'scroll');
this.scrollSubscription = this.scroll$
// continue only if the spinner is active
.pipe(filter(() => this.isActive))
.subscribe(_e => {
this.doSomeStuff();
});
无论哪种方法在大多数应用程序中都应该可以很好地工作,但要确定最有效的方法,这将取决于几件事 主要问题是您订阅/取消订阅
.scroll
事件的频率。如果您每一两分钟只显示一次此微调器(并且只需要观看事件),我建议您进行完全订阅和取消订阅,即使组件未被销毁,因为这将最大限度地减少您需要观看的事件数量,但是如果微调器每隔几秒钟出现一次,您肯定只想过滤事件并取消订阅组件销毁
就处理而言,这两种方法的成本都相当低,因此无论您选择哪种方法,效果都很可能很小