項目
我最近開始開發加密貨幣交換聚合器?;旧衔視蛞欢巡煌慕灰姿l送請求并比較價格。這必須盡快完成。在這篇文章中,我將展示一些為了顯著提高我的表現而進行的調整。
但是請記住,我不是專家(尤其是圍棋專家),我只是分享我自己個人項目的發現。
改進
這些改進按運行時最大改進的順序排列。
1. 使用 goroutine
在任何 go 程序中,goroutine 對于速度都是至關重要的。我最大的提升是同時發送請求。由于我需要連接 12 個不同的交易所,因此同時發送這些請求將我的運行時間從大約 24 秒減少到了大約 3 秒。
立即學習“go語言免費學習筆記(深入)”;
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 請求性能的詳細內容,更多請關注愛掏網 - it200.com其它相關文章!