angular - 如何立即触发 httpclient 请求?
问题描述
我在通过 API 端点查询后端的 Angular 应用程序中遇到了一些性能问题。
它暴露了一个端点,我需要尽可能快地调用大量时间(> 2000)。
因此,我正在迭代一个 Set 并为每个项目调用一个正在调用 HttpClient get 方法的服务。它看起来大概是这样的:
this.itemList.forEach((item: Item) => {
this.itemWsService
.getItemComputation(item)
.subscribe(// callback method);
});
问题是,我没有得到我希望得到的表演。
为了了解是什么降低了应用程序的性能,我测量了:
- HttpClient get 方法调用的执行日期
- 后端接收 Http get 请求的日期(使用logback-access)
结果(如下图所示)是我在 Angular 中执行该方法后的数秒内收到后端请求。
我的问题是:在触发 get 方法调用的执行之前,Angular 是不是有点等待?是否存在一些瓶颈阻止并行发出 http 请求?如何避免这种情况?
我在同一台机器上运行 Angular 前端和 Java+Spring 后端,并使用 Electron 将 Angular 嵌入到本机应用程序中。
解决方案
在触发 get 方法调用的执行之前,Angular 是一种等待吗
不
是否存在一些瓶颈阻止并行发出 http 请求?
是的:
- 浏览器不会向给定主机发送多个并发请求(大约 6 个,IIRC)。请参阅浏览器中的最大并行 http 连接数?
- 如果您使用的是 Spring MVC,它的池中有最大数量的线程用于请求处理,因此请求也会在服务器上排队。
如何避免这种情况?
您可能可以调整浏览器设置以增加限制。但正确的做法是重新设计 API 以避免首先发送 2000 个并发请求。
推荐阅读
- visual-studio - 使用 nuget 包构建问题
- javascript - 什么将形状和 jQuery 属性添加到我的锚标记?
- php - 使用 array_search() 或 SELECT 子查询的 INSERT 查询会更快吗?
- java - 在按钮单击 RecyclerView 仅显示第一项
- android - 如何在android线性布局中使用50%的宽度和高度
- excel - 过滤列不包含
- ios - 此 iPhone 6 运行 iOS 11.3.1 (15E302),此版本的 Xcode 可能不支持
- html - 如何在 `datetime-local` 中删除 1985-04-12`T`23:20:50
- php - JSON -> PHP 中的多维数组 -> SQL
- java - Tomcat 8.5 ServletException JSP 文件未找到(但 100% 存在)