Попробуйте использовать операторы throttletime и diverUntilChanged в наблюдаемой прокрутке, чтобы события прокрутки не отображались на значение так часто, и вы генерируете новое логическое значение только если это действительно изменилось.
import { OnDestroy } from '@angular/core';
import { fromEvent, Subject } from 'rxjs';
import { distinctUntilChanged, map, takeUntil, throttleTime } from 'rxjs/operators';
const scrolledDown$ = fromEvent(window, 'scroll').pipe(
throttleTime(10), // only emit scroll events every 10 ms, set this to your needs
map(() => window.pageYOffset > 500), // map to a boolean value
distinctUntilChanged(), // only emit if the value has changed
takeUntil(this.destroy$) // unsubscribe when the component gets destroyed
);
private destroy$: Subject = new Subject();
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
scrolledDown$
будет выдавать логическое значение, указывающее, прокручивал ли пользователь ниже определенной точки (является ли window.pageYOffset
больше 500). По сути, это ваша isSectionFixed
ценность как наблюдаемой.
Либо подпишитесь на scrolledDown$
с помощью канала asnyc
в вашем шаблоне, либо вручную в своем коде, если необходимо. Если вы подписываетесь вручную, не забудьте отменить подписку, когда компонент будет уничтожен (для этого и есть destroy$
в моем коде).
BTW Apache ActiveMQ 6 будет, вероятно, использовать Буферы Протокола в качестве своего слоя маршалинга по умолчанию. Ранние события очень благоприятны; поскольку его легкое, чтобы иметь каждую конечную точку на различных версиях и все же все еще смочь проанализировать протокол двоичной синхронной передачи данных - плюс он кажется очень быстрым. Большая альтернатива JSON/XML, когда Вам нужно повышение производительности