私は最近、暗号通貨交換アグリゲーターの開発に取り組み始めました。基本的に、私はさまざまな取引所にリクエストを送信し、レートを比較します。これはできるだけ早く行う必要があります。この投稿では、パフォーマンスを大幅に向上させるために行った調整をいくつか紹介します。
ただし、私は (特に Go の) 専門家ではなく、私自身の個人的なプロジェクトから得た発見を共有しているだけであることに留意してください。
これらの改善は、ランタイムの改善が最も大きい順に行われます。
どの Go プログラムでも、速度を上げるためにゴルーチンは不可欠です。私が行った最大の効果は、リクエストを同時に送信したことです。 12 の異なる取引所にアクセスする必要があるため、これらのリクエストを同時に送信すると、ランタイムが約 24 秒からわずか約 3 秒に短縮されました。
Goroutine は素晴らしく、非常に使いやすいです。可能な限りそれらを含める必要があります。ただし、データ競合には常に注意してください
encoding/json を github.com/json-iterator/go.jsoniter に置き換えました。これは、標準ライブラリのドロップイン置換として機能する高速 JSON 処理ライブラリなので、コードを変更する必要はありませんでした。ライブラリスイッチ
ベンチマーク結果
パフォーマンスの向上を測定するために、encoding/json と jsoniter を比較するいくつかのベンチマークを実行しました。結果の概要は次のとおりです:
つまり、jsoniter は標準ライブラリよりも約 6 倍高速です。
リクエストごとに新しいHTTPハンドラーを作成するのではなく、HTTPハンドラーを再利用し始めました。ハンドラーを一度設定して再利用することで、リクエストごとに新しいハンドラーを作成するオーバーヘッドを削減しました。
ベンチマーク結果
再利用されたハンドラーとリクエストごとに新しいハンドラーを作成した場合を比較したベンチマークの結果は次のとおりです。
HTTP ハンドラーを再利用すると、リクエストごとに新しいハンドラーを作成する場合と比較して、パフォーマンスがわずかに向上しました。
これらの調整により、すべての情報を収集するのにかかる時間を最初の 24 秒から約 2 秒に短縮することができました。かなり確実に改善されました!
私のベンチマークのコードに興味がある場合は、ここから入手できます
この投稿を気に入っていただき、私の仕事をサポートしたい場合は、ここから寄付していただけます。
以上がGolang API リクエストのパフォーマンスの向上の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。