首頁 >後端開發 >Golang >提高 Golang API 請求效能

提高 Golang API 請求效能

PHPz
PHPz原創
2024-08-20 18:38:07596瀏覽

Improving Golang API request performance

專案

我最近開始開發加密貨幣交換聚合器。基本上我會向一堆不同的交易所發送請求並比較價格。這必須盡快完成。在這篇文章中,我將展示一些為了顯著提高我的表現而進行的調整。

但請記住,我不是專家(尤其是圍棋專家),我只是分享我個人專案的發現。

改進

這些改進按運行時最大改進的順序排列。

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 請求效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn