性能优化
预设配置对比
| 指标 | Default | Secure | Performance | Minimal |
|---|---|---|---|---|
| Request 超时 | 180s | 15s | 60s | 180s |
| MaxIdleConns | 50 | 20 | 100 | 10 |
| MaxConnsPerHost | 10 | 5 | 20 | 2 |
| MaxRetries | 3 | 1 | 3 | 0 |
| MaxResponseBodySize | 10MB | 5MB | 50MB | 1MB |
| HTTP/2 | 开启 | 开启 | 开启 | 开启 |
| Cookies | 关闭 | 关闭 | 开启 | 关闭 |
| SSRF 防护 | 开启 | 开启 | 开启 | 开启 |
| FollowRedirects | 开启 | 关闭 | 开启 | 关闭 |
场景选型
| 场景 | 推荐预设 | 调整建议 |
|---|---|---|
| 通用 Web 服务 | Default | - |
| 处理用户提供的 URL | Secure | - |
| 内部微服务高并发 | Performance | 调大 MaxIdleConns |
| 一次性脚本 | Minimal | - |
| 文件下载服务 | Performance | 增大 MaxResponseBodySize |
| 金融/医疗 API | Secure + 自定义 | 增加审计中间件 |
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() |