В настоящее время я использую Angular v5 с rxjs v.5.5.6.
Я хочу уменьшить утечку памяти в моем угловом 5-компонентном компоненте. Я реализовал «официальную» рекомендуемую стратегию, передавая takeUntil (this.destroy $) перед каждой подпиской.
import {takeUntil} from 'rxjs/operators';
import { Subject } from 'rxjs/Subject';
...
private destroy$ = new Subject();
...
// sample subscriber
this.adminService.GetCompanySettings('potatoCorp').pipe(
takeUntil(this.destroy$)
).subscribe(res => {}, null, null);
// sample mergemap combinator
this.basicMemberService.currentMember.pipe(
mergeMap(currentMember => {
// do some internal logic
return this.utilityService.getMemberInfo(currentMember.Id)/* 'Tried this'.pipe(
takeUntil(this.destroy$))
*/
}),
takeUntil(this.destroy)
).subscribe(result => {
// do something here
}
)
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
Я попытался добавить стратегию pipe (takeUntil) к возвращаемой наблюдаемой в mergeMap, но это мало что дало.
Первый из них сделан просто из пребывания на главной странице. Второй выполняется после входа в memberDetails, а затем возврата на домашнюю страницу.
Почему так много подписчиков (разных типов) остаются в памяти? На данный момент куча увеличивается примерно на 5 МБ каждый раз, когда пользователь выполняет самые основные операции.