Состояние гонки в эффектах ngrx с картой переключения, приводящей к снижению производительности - PullRequest
1 голос
/ 07 ноября 2019

У меня есть один простой эффект, который делает запрос GET, используя сервис Injected Angular.

Этот запрос возвращает ответ JSON (10 000 строк).

  @Effect()
  effectExample$ = this.actions$
    .pipe(
      ofType(actions.ONE_EXAMPLE_REST_API_ACTION),
      switchMap((action: actions.OneExampleRestApiAction) => {
        console.time('timer');
        return this.service
          .getJsonResponse()
          .pipe(
            map((response) => {
              console.timeEnd('timer');
              return new actions.OneExampleRestApiActionSuccess(response);
            })
          );
      })
    );

Как видите, я добавил console.time ('timer');console.timeEnd ('timer');

А что происходит?

В консоли я получаю, что таймер занимает примерно 15-20 секунд. Это может отличаться, в то время как если я вызываю тот же запрос, который вызывается с помощью getJsonResponse () с использованием POSTMAN , тогда запросы всегда занимают максимум 2-3 секунды.

getJsonResponse() {
return this.http
      .get(`http://example.com/getjson`);
}

Что может бытьпричина в том, что до выполнения карты требуется 15 - 20 секунд или

return new actions.OneExampleRestApiActionSuccess(response);

Может ли это быть потому, что ответ является объектом JSON из 10000 строк, чтобы почтальон мог обработать его быстрее или? У меня действительно нет идеи в настоящее время, что является блокировщиком из строки: .getJsonResponse () до , возвращают новые действия. Мне нужно, как я сказал, только 2-3 секунды, чтобы вернуть ответ, если я использую почтальон.

Также во вкладке сети для указанного выше запроса показывается время выполнения 2 секунды, но, очевидно, Angular или Effect требуется 15 - 20 секунд. чтобы добраться до возврата новых действий. OneExampleRestApiActionSuccess (response);

enter image description here

1 Ответ

1 голос
/ 08 ноября 2019

Вы попали в состояние гонки из-за switchMap. Это вызывает задержку, которую вы видите во время ответа. Вот хороший пост , на который вы ссылаетесь

...