如何立即触发httpclient请求?

时间:2019-05-02 11:43:14

标签: angular performance angular-httpclient

我在通过API端点查询后端的Angular应用程序中遇到性能问题。

它公开了一个端点,我需要尽可能快地调用大量时间(> 2000)。

因此,我正在遍历Set,并为每个项目调用一个服务,该服务正在调用HttpClient get方法。 看起来像这样:

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

问题是,我没有获得我希望得到的表演。

为了了解导致应用程序性能下降的原因,我进行了测量:

  • HttpClient get方法调用的执行日期
  • Http的日期在后端获取请求接收(使用logback-access

结果(如下图所示)是在Angular中执行该方法几秒钟后,我正在后端接收请求。

Chart

我的问题是:Angular是在执行get方法调用执行之前的一种等待吗?可能存在一些瓶颈,导致无法并行执行http请求?如何避免这种情况?


我正在同一台计算机上运行Angular前端和Java + Spring后端,并使用Electron将Angular嵌入到本机应用程序中。

2 个答案:

答案 0 :(得分:2)

  

Angular是在触发执行get方法调用之前的等待方式

  

可能存在一些瓶颈,无法并行执行http请求吗?

是:

    浏览器向给定主机(大约6个,IIRC)发送的并发请求不会超过几个。参见Max parallel http connections in a browser?
  • 如果您使用的是Spring MVC,则其池中具有用于处理请求的最大线程数,因此请求也将在服务器上排队。
  

如何避免这种情况?

您可能可以调整浏览器设置以增加限制。但是正确的做法是重新设计API,以避免首先发送2000个并发请求。

答案 1 :(得分:1)

浏览器对并发请求数施加限制。

从应用程序设计的角度来看,如果您需要一次创建成千上万个请求,则出了点问题。例如,您可以为所有项目创建一个请求,并在单个响应中接收所有数据。

我对Spring不太了解,但是我想它提供了一种如何一次获取所有数据的方法。