Skip to content

パフォーマンス最適化

プリセット設定の比較

指標DefaultSecurePerformanceMinimal
Request タイムアウト180s15s60s180s
MaxIdleConns502010010
MaxConnsPerHost105202
MaxRetries3130
MaxResponseBodySize10MB5MB50MB1MB
HTTP/2有効有効有効有効
Cookies無効無効有効無効
SSRF 防護有効有効有効有効
FollowRedirects有効無効有効無効

シナリオ別選択

シナリオ推奨プリセット調整の提案
汎用 Web サービスDefault-
ユーザー提供の URL を処理Secure-
内部マイクロサービス高並列PerformanceMaxIdleConns を増加
一度きりのスクリプトMinimal-
ファイルダウンロードサービスPerformanceMaxResponseBodySize を増加
金融/医療 APISecure + カスタム監査ミドルウェアを追加
go
// 高スループットシナリオ
client, _ := httpc.New(httpc.PerformanceConfig())

// プリセットをベースに微調整
cfg := httpc.PerformanceConfig()
cfg.Timeouts.Request = 120 * time.Second
cfg.Connection.MaxIdleConns = 200
client, _ := httpc.New(cfg)

オブジェクトプール再利用

HTTPC は内部でエンジンのレスポンスオブジェクトと文字列ビルダーを sync.Pool で再利用し、GC 負荷を軽減します。Result 自体はリクエストごとに新規作成され、GC が自動的に回収します:

go
result, err := client.Get(url)
if err != nil {
    return err
}
// Result はリクエストごとに新規作成、GC が自動回収、手動解放不要

TIP

高並列シナリオでは、オブジェクトプールの再利用により GC 負荷を大幅に軽減できます。

パフォーマンスアンチパターン

アンチパターン原因正しいアプローチ
リクエストごとにクライアントを作成接続の再利用ができないクライアントをグローバルで再利用
MaxResponseBodySize が大きすぎるメモリ消費適切な制限を設定
ホットパスで result.String() を使用文字列構築のオーバーヘッドBody() を直接使用

次のステップ