登录
首页 >  Golang >  Go教程

提高 Golang API 请求性能

来源:dev.to

时间:2024-08-21 09:12:46 229浏览 收藏

大家好,我们又见面了啊~本文《提高 Golang API 请求性能》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

提高 Golang API 请求性能

项目

我最近开始开发加密货币交换聚合器。基本上我会向一堆不同的交易所发送请求并比较价格。这必须尽快完成。在这篇文章中,我将展示一些为了显着提高我的表现而进行的调整。

但是请记住,我不是专家(尤其是围棋专家),我只是分享我自己个人项目的发现。

改进

这些改进按运行时最大改进的顺序排列。

1. 使用 goroutine

在任何 go 程序中,goroutine 对于速度都是至关重要的。我最大的提升是同时发送请求。由于我需要连接 12 个不同的交易所,因此同时发送这些请求将我的运行时间从大约 24 秒减少到了大约 3 秒。

goroutines 非常棒并且非常容易使用。您应该尽可能包含它们。但始终要小心数据争用

2. 升级json库

我将 encoding/json 换成了 github.com/json-iterator/go。jsoniter 是一个快速 json 处理库,可以作为标准库的直接替代品,所以我不必更改任何代码,只需图书馆开关。

基准测试结果

为了衡量性能改进,我运行了一些基准测试来比较encoding/json 和 jsoniter。以下是结果摘要:

goos: linux
goarch: amd64
pkg: apispeedimprove
cpu: amd ryzen 5 7640u w/ radeon 760m graphics      
benchmarkencodingjson-12 140383 7381 ns/op
benchmarkjsoniter-12 974605 1217 ns/op
pass
ok apispeedimprove 3.216s

所以,jsoniter 比标准库快大约 6 倍。

3. 重用 http 处理程序

我开始重用 http 处理程序,而不是为每个请求创建新的处理程序。通过设置一次处理程序并重复使用它,我减少了为每个请求创建新处理程序的开销。

基准测试结果

以下是比较重用处理程序与为每个请求创建新处理程序的基准测试结果:

goos: linux
goarch: amd64
pkg: apiSpeedImprove/httpReuse
cpu: AMD Ryzen 5 7640U w/ Radeon 760M Graphics      
BenchmarkReusedHandler-12 2179 505189 ns/op
BenchmarkNewHandlerPerRequest-12 2341 507525 ns/op
PASS
ok apiSpeedImprove/httpReuse 7.270s

与为每个请求创建新的处理程序相比,重用 http 处理程序可以略微提升性能。

结论

通过这些调整,我成功地将收集所有信息所需的时间从最初的 24 秒缩短到大约 2 秒。相当扎实的进步!

如果您对我的基准测试代码感兴趣,可以在这里找到

如果您喜欢这篇文章并想支持我的工作,您可以在这里捐款。

以上就是《提高 Golang API 请求性能》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>