我有一个用Angular编写的微调器组件。如果微调器组件处于活动状态,即微调器正在运行,那么我需要订阅window. scroll事件来进行一些位置计算。
我想知道在微调器运行时始终创建订阅并在微调器不再运行时取消订阅是否是个好主意。或者如果我在组件初始化时创建一次订阅并使用过滤器运算符,在微调器处于活动状态时进入订阅()。当组件被销毁时取消订阅。
我当前的实现使用过滤器:
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
事件的频率。如果你每隔一两分钟只显示一次这个微调器(然后只需要观看事件),我建议你即使组件没有被销毁也进行完全订阅和取消订阅,因为这将最大限度地减少你需要观看的事件数量,但是如果微调器每隔几秒钟就会出现一次,你肯定只想过滤事件并在组件销毁时取消订阅。
就处理而言,这两种方法的成本都相当低,因此无论您选择哪种路线,效果都可能很小。