Java 如何提高HttpClient响应的处理速度?
我正在创建一个程序,该程序将从以下位置使用外部API:。我使用搜索端点根据查询接收对象列表。使用Gson将结果转换为对象,然后在JavaFX中打印到TableView表中 问题是搜索结果中的位置越多,程序处理它所需的时间就越长。当搜索结果中只有两个位置时,时间是相当合理的,但如果有50个位置,我的计算机处理它可能需要10秒以上。在邮递员程序中获得相同的结果最多需要两秒钟,因此错误在我的代码一侧 只是为了检查一下,我跳过了Gson解析字符串结果的部分,我直接将结果打印为一个字符串,这仍然比它应该花费的时间长得多。因此,我假设错误出现在将响应转换为字符串的应用程序部分。我怎样才能修好它 这是我的密码:Java 如何提高HttpClient响应的处理速度?,java,httpclient,Java,Httpclient,我正在创建一个程序,该程序将从以下位置使用外部API:。我使用搜索端点根据查询接收对象列表。使用Gson将结果转换为对象,然后在JavaFX中打印到TableView表中 问题是搜索结果中的位置越多,程序处理它所需的时间就越长。当搜索结果中只有两个位置时,时间是相当合理的,但如果有50个位置,我的计算机处理它可能需要10秒以上。在邮递员程序中获得相同的结果最多需要两秒钟,因此错误在我的代码一侧 只是为了检查一下,我跳过了Gson解析字符串结果的部分,我直接将结果打印为一个字符串,这仍然比它应该花
public String searchFood(String food) {
//method might throw exception
try {
//creating URI
URI searchUri = convertQueryIntoUri(food);
//establishing connection
HttpClient connection = HttpClient.newHttpClient();
//defining request
HttpRequest request = HttpRequest.newBuilder()
.uri(searchUri)
.GET()
.build();
//sending request and returning the result in the form of String
return connection.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.join();
} catch (Exception e) {
return "incorrect query or connection error";
}
}
稍后我将打印响应,所需时间取决于搜索结果返回的对象数量。对于“西瓜”(2个结果),它需要2-3秒。对于“鸡”(超过40只),甚至需要20秒。我还尝试了同步发送(“send”方法),在性能上没有差别
编辑:找到解决方案!虽然没有人回答,但经过漫长的一天与谷歌的合作,我找到了一个解决方案:我们应该通过在请求头中指向gzip格式对请求进行加密。然后在接收到Gzip流之后,我们应该将其解压缩回字符串。显然,以字符串格式下载Json数据效率不高。“鸡”搜索现在大约需要3秒钟。速度快了5-6倍。我就是这样修改请求的:
HttpRequest request = HttpRequest.newBuilder()
.header("Accept-Encoding", "gzip")
.uri(searchUri)
.GET()
.build();
下面是我找到的解压gzip的指令: