跳转至

HTTP 客户端性能测试

zerodep HTTP 客户端与 httpx(带连接池)的同条件性能对比。

测试环境

  • CPU: x86_64 Linux
  • Python: 3.12
  • 工具: pytest-benchmark 5.2.3(报告均值)
  • 对标库: httpx 0.28.1
  • 最后更新: 2026-04-21

实现对比

实现 文件/包 说明
zerodep httpclient.py 仅依赖标准库的 HTTP/1.1 客户端
httpx (参考库) 带连接池的流行 HTTP 库

性能对比(均值)

基本请求

测试项 zerodep httpx 倍数
同步 GET 613.9 μs 20,830.0 μs 快 33.9x
同步 POST JSON 709.6 μs 21,030.0 μs 快 29.6x
同步 Client GET 637.6 μs 1,020.0 μs 快 1.6x
异步 GET 1,110.0 μs 27,530.0 μs 快 24.8x
异步 POST JSON 1,220.0 μs 28,130.0 μs 快 23.1x
异步 Client GET 1,160.0 μs 26,590.0 μs 快 22.9x

流式传输

测试项 zerodep httpx 倍数
同步流式传输 627.5 μs 20,990.0 μs 快 33.4x
异步流式传输 1,150.0 μs 26,780.0 μs 快 23.3x

文件上传(multipart/form-data)

测试项 zerodep httpx 倍数
同步文件上传 991.3 μs 21,610.0 μs 快 21.8x
异步文件上传 1,510.0 μs 28,020.0 μs 快 18.5x

内容解压缩

测试项 zerodep httpx 倍数
同步 Gzip GET 646.2 μs 20,710.0 μs 快 32.1x

SOCKS5 代理

httpx[socks](使用 socksio)对比。均通过本地 SOCKS5 代理转发。

测试项 zerodep httpx[socks] 倍数
同步 SOCKS5 GET 1,600.0 μs 23,490.0 μs 快 ~15x
同步 SOCKS5 POST JSON 1,920.0 μs 23,740.0 μs 快 ~12x
异步 SOCKS5 GET 4,220.0 μs 23,560.0 μs 快 ~6x
同步 SOCKS5 流式传输 43,390.0 μs 57,170.0 μs 快 ~1.3x

要点总结

  • 一次性请求快 19--34 倍——不使用连接池时,zerodep 大幅快于 httpx,因为避免了 httpx 的重量级客户端初始化和中间件栈开销。
  • 连接池场景快约 1.6 倍——即使两者复用连接,zerodep 更轻量的抽象层仍有可测量的优势。
  • 流式传输快 23--33 倍——zerodep 精简的流式抽象直接转化为吞吐量提升。
  • 文件上传快 19--22 倍——zerodep 简洁的 multipart 编码器优于 httpx 的功能更丰富的实现。
  • SOCKS5 代理快 6--15 倍——zerodep 纯标准库的 SOCKS5 实现避免了 httpx 所需的 socksio + httpcore 代理栈开销。
  • 测试使用本地服务器——所有请求访问 localhost,数据反映的是纯库开销,不含网络延迟。
  • zerodep 无需任何 pip 依赖——同步模式使用标准库 http.client,异步模式使用 asyncio 流。

自行运行

pip install pytest pytest-benchmark httpx[socks]
pytest httpclient/test_http_benchmark.py --benchmark-only -v

最新 CI 结果

每次发版时通过 Benchmark CI 自动更新。