Разница во времени от NgOnInit / NgAfterViewInit и подписка другой наблюдаемой - PullRequest
1 голос
/ 21 апреля 2020

У меня есть вызов API для получения ответа от WebAPI в методе ngOnInit. Я также отслеживаю время отклика всех вызовов API в перехватчике. Это отслеживание заканчивается, когда ответ получен с использованием «tap» из rx js.

.pipe(tap((data) => {}));

. У меня также есть такой же тип отслеживания в WebAPI для определения времени ответа. От dev-tools сетевой вызов завершается примерно за 70/100 мс, отслеживание на стороне WebAPI отслеживает практически то же время. Но перехватчик отслеживает около 1200 мс, пожалуйста, обратите внимание, что на карте нет дополнительных логов c.

Этот же вызов занял всего около 150/200 мс при добавлении в метод подписки другого наблюдаемого для загрузить некоторые данные. Обратите внимание, что эта вторая наблюдаемая запускается другим компонентом на основе логики c в NgAfterViewInit.

Я пытался переместить вызовы из ngOnInit в ngAfterViewInit, но с тем же поведением.

Я попытался прочитать документацию по Rx JS, перехватчик жизненного цикла, чтобы найти, есть ли что-то, что может блокировать инициировать нажатие при вызове API во время визуализации пользовательского интерфейса.

Любые предложения по обнаружению разницы в этих временах помогут.

Обновление: не публикуйте точный код, но это должно дать вам По идее, у него нет никаких дополнительных логик c, которые здесь не упомянуты.

Приведенный ниже код находится в методе ngOnInit.

this.service.getSomeData().subscribe(data => {
  this.somevariable = data;
});

В приведенном ниже сервисе код присутствует.

public getSomeData(): Observable<SomeType> {
  this.tracking.start("getSomeData");
  return this.httpClient.get<SomeType>(this.apiHostPathUrl).pipe(
    tap(_ => { this.tracking.end("getSomeData"); })).map(item => {
      item.someProperty = <some logic here to change the value>;
      return item;
    });
}

Служба отслеживания использует API Performance Timing (https://nodejs.org/api/perf_hooks.html), чтобы отметить начало и конец транзакции после получения ответа. Для этого случая я переместил отслеживание с перехватчика на отдельный сервисный вызов, но в INTERCEPTOR также использую кран, чтобы завершить отслеживание.

...