如何立即触发 httpclient 请求?
How to immediately fire httpclient request?
我遇到了一些 Angular 应用程序通过 API 端点查询后端的性能问题。
它公开了一个端点,我需要尽可能快地调用大量时间 (>2000)。
因此,我正在迭代一个 Set 并为每个项目调用一个调用 HttpClient get 方法的服务。
它看起来大致像这样:
this.itemList.forEach((item: Item) => {
this.itemWsService
.getItemComputation(item)
.subscribe(// callback method);
});
问题是,我没有得到我希望得到的性能。
为了了解导致应用程序性能下降的原因,我进行了测量:
- HttpClient get 方法调用的执行日期
- 后端接收 Http get 请求的日期(使用 logback-access)
结果(如下图所示)是我在 Angular.
中执行该方法后许多秒后在后端收到请求
Chart
我的问题是:Angular 是否在触发执行 get 方法调用之前等待?可能有一些瓶颈阻止并行发出 http 请求吗?如何避免这种情况?
我 运行 Angular 前端和 Java+Spring 后端在同一台机器上,并将 Angular 嵌入本机应用程序使用电子.
Is Angular kind of waiting before firing the execution of get method call
没有
Might there be some bottleneck preventing http requests to be made in parallel ?
是:
- 浏览器不会向给定主机发送超过几个并发请求(大约 6,IIRC)。参见
- 如果您正在使用 Spring MVC,它在其池中有最大线程数用于请求处理,因此请求也会在服务器上排队。
How to avoid this ?
您或许可以调整浏览器设置以增加限制。但正确的做法是重新设计 API 以避免首先发送 2000 个并发请求。
浏览器对并发请求数有限制。
从应用程序设计的角度来看,如果您需要同时创建数千个请求,那就有问题了。例如,您可以为所有项目创建一个请求并在一个响应中接收所有数据。
我不太了解Spring,但我想它提供了一种如何一次获取所有数据的方法。
我遇到了一些 Angular 应用程序通过 API 端点查询后端的性能问题。
它公开了一个端点,我需要尽可能快地调用大量时间 (>2000)。
因此,我正在迭代一个 Set 并为每个项目调用一个调用 HttpClient get 方法的服务。 它看起来大致像这样:
this.itemList.forEach((item: Item) => {
this.itemWsService
.getItemComputation(item)
.subscribe(// callback method);
});
问题是,我没有得到我希望得到的性能。
为了了解导致应用程序性能下降的原因,我进行了测量:
- HttpClient get 方法调用的执行日期
- 后端接收 Http get 请求的日期(使用 logback-access)
结果(如下图所示)是我在 Angular.
中执行该方法后许多秒后在后端收到请求Chart
我的问题是:Angular 是否在触发执行 get 方法调用之前等待?可能有一些瓶颈阻止并行发出 http 请求吗?如何避免这种情况?
我 运行 Angular 前端和 Java+Spring 后端在同一台机器上,并将 Angular 嵌入本机应用程序使用电子.
Is Angular kind of waiting before firing the execution of get method call
没有
Might there be some bottleneck preventing http requests to be made in parallel ?
是:
- 浏览器不会向给定主机发送超过几个并发请求(大约 6,IIRC)。参见
- 如果您正在使用 Spring MVC,它在其池中有最大线程数用于请求处理,因此请求也会在服务器上排队。
How to avoid this ?
您或许可以调整浏览器设置以增加限制。但正确的做法是重新设计 API 以避免首先发送 2000 个并发请求。
浏览器对并发请求数有限制。
从应用程序设计的角度来看,如果您需要同时创建数千个请求,那就有问题了。例如,您可以为所有项目创建一个请求并在一个响应中接收所有数据。
我不太了解Spring,但我想它提供了一种如何一次获取所有数据的方法。