Angular 如何立即启动httpclient请求?

Angular 如何立即启动httpclient请求?,angular,performance,angular-httpclient,Angular,Performance,Angular Httpclient,我在通过API端点查询后端的Angular应用程序中遇到了一些性能问题 它公开了一个端点,我需要尽可能快地调用大量时间(>2000) 因此,我在一个集合上迭代,并为每个项调用一个服务,该服务调用一个HttpClient get方法。 它看起来大概是这样的: this.itemList.forEach((item: Item) => { this.itemWsService .getItemComputation(item) .subscribe(// cal

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

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

因此,我在一个集合上迭代,并为每个项调用一个服务,该服务调用一个HttpClient get方法。 它看起来大概是这样的:

this.itemList.forEach((item: Item) => {
    this.itemWsService
      .getItemComputation(item)
      .subscribe(// callback method);
});
问题是,我没有得到我想要的表现

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

  • HttpClient get方法调用的执行日期
  • 后端接收Http get请求的日期(使用)
结果(如下图所示)是,在我在Angular内执行该方法的几秒钟后,我在后端接收到请求

我的问题是:在触发get方法调用的执行之前是否有一种等待?可能有一些瓶颈阻止http请求并行进行吗?如何避免这种情况


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

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

没有

可能有一些瓶颈阻止http请求并行进行吗

是的:

  • 浏览器向给定主机发送的并发请求不会超过几个(大约6个,IIRC)。看
  • 如果您使用的是SpringMVC,那么它的池中有最大数量的线程用于处理请求,因此请求也将在服务器上排队
如何避免这种情况


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

浏览器对并发请求数量进行了限制

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


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

我将此答案标记为已接受:浏览器限制似乎是对此行为的实际解释(如图所示,最初的6个请求几乎是同时进行的)。我同意这种解决方案的糟糕设计,很久以前它就是这样设计的,在匆忙中。我肯定会重新设计端点以接收项目列表,处理它并使用WebSocket异步发送结果。谢谢你的回答!我已经开始实现这样的解决方案,但它需要在计算结果可用时立即发送它们。正如对JB Nizet所说:“我肯定会重新设计端点以接收项目列表,处理它并使用WebSocket异步发送结果。”也感谢您的回答。