Как немедленно запустить запрос httpclient? - PullRequest
1 голос
/ 02 мая 2019

Я столкнулся с некоторой проблемой производительности в приложении Angular, которое запрашивает бэкэнд через конечные точки API.

Это открывает конечную точку, которую мне нужно назвать огромным количеством времени (> 2000) как можно быстрее.

Таким образом, я перебираю Set и для каждого элемента вызываю службу, которая вызывает метод get HttpClient.Это выглядит примерно так:

this.itemList.forEach((item: Item) => {
    this.itemWsService
      .getItemComputation(item)
      .subscribe(// callback method);
});

Проблема в том, что я не получаю желаемых результатов.

Чтобы понять, что замедляет работу приложений, я измерил:

  • дата выполнения вызова метода HttpClient
  • дата получения запроса Http о получении на бэкэнде (с использованием logback-access )

В результате (показанном на рисунке ниже) я получаю запросы на серверную часть спустя много секунд после выполнения метода в Angular.

Диаграмма

Мой вопрос: является ли Angular своего рода ожиданием перед выполнением вызова метода get?Может ли быть какое-то узкое место, препятствующее параллельному выполнению http-запросов?Как этого избежать?


Я запускаю внешний интерфейс Angular и серверную часть Java + Spring на одном компьютере и встраиваю Angular в собственное приложение с помощью Electron.

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Угловой вид ожидания перед запуском выполнения вызова метода get

нет

Нет

Может ли быть какое-то узкое место, препятствующее параллельному выполнению http-запросов?

Да:

  • браузеры не отправляют более нескольких одновременных запросов на данный хост (около 6, IIRC). См. Макс. Число параллельных HTTP-подключений в браузере?
  • если вы используете Spring MVC, он имеет максимальное количество потоков в своем пуле для обработки запросов, поэтому запросы также будут помещаться в очередь на сервере.

Как этого избежать?

Возможно, вы можете изменить настройки вашего браузера, чтобы увеличить лимит. Но правильной вещью было бы изменить дизайн API, чтобы избежать необходимости отправлять 2000 одновременных запросов.

1 голос
/ 02 мая 2019

Браузер накладывает ограничение на количество одновременных запросов.

С точки зрения разработки приложения, если вам нужно создать тысячи запросов одновременно, что-то не так.Например, вы можете создать один запрос для всех элементов и получить все данные в одном ответе.

Я не знаю много о Spring, но, думаю, он дает способ получить все данные.сразу.

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