このツールは進行中の作業です。それはまだ完全に制御可能ではありませんが、あなたはそれを試すことができます。
Perfguardは、パフォーマンスに重点を置いたGO静的アナライザーです。
2つの実行モードをサポートします。
perfguard lint潜在的な問題を見つけ、従来の静的分析のような動作perfguard optimize CPUプロファイルを使用して分析精度を改善しますPerfguardキー機能:
perfguard optimizeモードのプロファイルガイド分析--fix引数(QuickFixes)で自動固定可能です(*)分析ターゲットを一度にメモリにロードしようとはしません。
これがあなたのために何ができるかの例をいくつか紹介します:
$(go env GOPATH)/binの下にperfguardバイナリをインストールします。
$ go install -v github.com/quasilyte/go-perfguard/cmd/perfguard@latest現実的なワークフローでCPUプロファイルを収集することをお勧めします。
短命のCLIアプリの場合、それは完全に実行される可能性があります。長年のアプリの場合、プロファイリングを1分以上オンにして、ファイルに保存することができます。
ベンチマークから取得されるプロファイルは代表的ではなく、最適ではない結果につながる可能性があります。
プロファイル内のホットスポットは、3つの主要な場所に表示される場合があります。
独自のコードを最適化するのは簡単です。プロジェクトのルートでPerfguardを実行します。
$ perfguard optimize --heatmap cpu.out ./...これは、 (2)カテゴリへの修正のみを提案します。
(3)からコードを最適化するには、いくつかの選択肢があります。
最初のオプションが望ましいです。同じCPUプロファイルを使用して、ライブラリを最適化できます。あなたがあなたのアプリケーションで行ったのと同じように、ライブラリソースコードのルートでPerfguardを実行します。
2番目のオプションは、最初のオプションを使用して依存関係を修正する方法がない間に、最適化されたバイナリを展開する場合に機能する場合に機能します。次の手順に従ってください:
# Make dependencies easily available for perfguard.
$ go mod vendor
# Run the analysis over the vendor.
# We use --fix argument to immediately apply the suggested changes.
$ perfguard optimize --heatmap cpu.out --fix ./vendor/...
# Build the optimized binary.
$ go build -o bin/app ./cmd/myappその後、変更を./vendorに戻すか、ベンダーを使用していない場合は削除できます。