首页 > 解决方案 > 如何立即触发 httpclient 请求?

问题描述

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

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

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

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

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

为了了解是什么降低了应用程序的性能,我测量了:

结果(如下图所示)是我在 Angular 中执行该方法后的数秒内收到后端请求。

图表

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


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

标签: angularperformanceangular-httpclient

解决方案


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

是否存在一些瓶颈阻止并行发出 http 请求?

是的:

  • 浏览器不会向给定主机发送多个并发请求(大约 6 个,IIRC)。请参阅浏览器中的最大并行 http 连接数?
  • 如果您使用的是 Spring MVC,它的池中有最大数量的线程用于请求处理,因此请求也会在服务器上排队。

如何避免这种情况?

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


推荐阅读