Несвободные подписчики в памяти - PullRequest
1 голос
/ 04 июля 2019

В настоящее время я использую 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, но это мало что дало.

A screenshot of two heap snapshots. The first one is made from just staying at the homepage. The second is made after going into memberDetails, then returning to the homepage.

Первый из них сделан просто из пребывания на главной странице. Второй выполняется после входа в memberDetails, а затем возврата на домашнюю страницу.

Почему так много подписчиков (разных типов) остаются в памяти? На данный момент куча увеличивается примерно на 5 МБ каждый раз, когда пользователь выполняет самые основные операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...