項(xiàng)目
我最近開始開發(fā)加密貨幣交換聚合器?;旧衔視蛞欢巡煌慕灰姿l(fā)送請求并比較價格。這必須盡快完成。在這篇文章中,我將展示一些為了顯著提高我的表現(xiàn)而進(jìn)行的調(diào)整。
但是請記住,我不是專家(尤其是圍棋專家),我只是分享我自己個人項(xiàng)目的發(fā)現(xiàn)。
改進(jìn)
這些改進(jìn)按運(yùn)行時最大改進(jìn)的順序排列。
1. 使用 goroutine
在任何 go 程序中,goroutine 對于速度都是至關(guān)重要的。我最大的提升是同時發(fā)送請求。由于我需要連接 12 個不同的交易所,因此同時發(fā)送這些請求將我的運(yùn)行時間從大約 24 秒減少到了大約 3 秒。
立即學(xué)習(xí)“go語言免費(fèi)學(xué)習(xí)筆記(深入)”;
goroutines 非常棒并且非常容易使用。您應(yīng)該盡可能包含它們。但始終要小心數(shù)據(jù)爭用
2. 升級json庫
我將 encoding/json 換成了 github.com/json-iterator/go。jsoniter 是一個快速 json 處理庫,可以作為標(biāo)準(zhǔn)庫的直接替代品,所以我不必更改任何代碼,只需圖書館開關(guān)。
基準(zhǔn)測試結(jié)果
為了衡量性能改進(jìn),我運(yùn)行了一些基準(zhǔn)測試來比較encoding/json 和 jsoniter。以下是結(jié)果摘要:
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 比標(biāo)準(zhǔn)庫快大約 6 倍。
3. 重用 http 處理程序
我開始重用 http 處理程序,而不是為每個請求創(chuàng)建新的處理程序。通過設(shè)置一次處理程序并重復(fù)使用它,我減少了為每個請求創(chuàng)建新處理程序的開銷。
基準(zhǔn)測試結(jié)果
以下是比較重用處理程序與為每個請求創(chuàng)建新處理程序的基準(zhǔn)測試結(jié)果:
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
與為每個請求創(chuàng)建新的處理程序相比,重用 http 處理程序可以略微提升性能。
結(jié)論
通過這些調(diào)整,我成功地將收集所有信息所需的時間從最初的 24 秒縮短到大約 2 秒。相當(dāng)扎實(shí)的進(jìn)步!
如果您對我的基準(zhǔn)測試代碼感興趣,可以在這里找到
如果您喜歡這篇文章并想支持我的工作,您可以在這里捐款。
以上就是提高 Golang API 請求性能的詳細(xì)內(nèi)容,更多請關(guān)注愛掏網(wǎng) - it200.com其它相關(guān)文章!