项目
我最近开始开发交换聚合器。基本上我会向一堆不同的发送请求并比较价格。这必须尽快完成。在这篇文章中,我将展示一些为了显着提高我的表现而进行的调整。
但是请记住,我不是专家(尤其是围棋专家),我只是分享我自己个人项目的发现。
改进
这些改进按运行时最大改进的顺序。
1. 使用 goroutine
在任何 go 程序中,goroutine 对于速度都是至关重要的。我最大的提升是同时发送请求。由于我需要连接 12 个不同的交易所,因此同时发送这些请求将我的运行时间从大约 24 秒减少到了大约 3 秒。
立即学习“”;
goroutines 非常棒并且非常容易使用。您应该尽可能包含它们。但始终要小心数据争用
2. 升级json库
我将 encoding/json 换成了 hub.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 请求性能的详细内容,更多请关注php中文网其它相关文章!