RxJS - 订阅/取消订阅vs filter()运算符

时间:2018-01-19 14:12:43

标签: angular rxjs

我有一个用Angular编写的微调器组件。如果微调器组件处于活动状态,即spinner正在运行,那么我需要订阅window.scroll事件来进行一些位置计算。

我想知道在微调器运行时始终创建订阅是否是个好主意,如果微调器不再运行则取消订阅。 或者,如果我在组件初始化并使用过滤器运算符时创建一次订阅会更好,则在微调器处于活动状态时进入subscribe()。只需在组件被销毁时取消订阅。

我当前的实现适用于过滤器:

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();
    });

1 个答案:

答案 0 :(得分:2)

无论哪种方式都可以在大多数应用程序中正常工作,但它将取决于几个方面来确定最有效的方法。

主要原因是您订阅/取消订阅.scroll活动的频率。如果您每隔一两分钟只展示一次这个微调器(并且只需要观察事件),我建议您进行完全订阅并取消订阅,即使该组件未被销毁,因为这样可以最大限度地减少您需要观察的事件数量,但如果每隔几秒钟就会出现微调器,您肯定只想过滤事件并取消订阅组件销毁。

就处理而言,这两种成本都相当低,因此无论您选择何种路线,效果都可能很小。