JSON-RPC 性能测试¶
zerodep JSON-RPC 与 jsonrpcserver 的同类对比性能测试。
测试环境
- CPU: x86_64 Linux
- Python: 3.12
- 工具: pytest-benchmark 5.2.3(报告均值)
- 对标库: jsonrpcserver 5.0.9
- 最后更新: 2026-04-21
实现对比¶
| 实现 | 文件/包 | 说明 |
|---|---|---|
| zerodep | jsonrpc.py |
仅依赖标准库的 JSON-RPC 2.0,含分发器、传输层和流式支持 |
| jsonrpcserver | (参考库) | 流行的 JSON-RPC 服务器库 |
测试方法¶
端到端分发对比:JSON 字符串 → 解析 → 分发 → 序列化 → JSON 字符串。这是最公平的比较方式,因为 jsonrpcserver 基于序列化的 JSON 字符串操作。
分发性能(均值)¶
| 场景 | zerodep | jsonrpcserver | 倍数 |
|---|---|---|---|
| 成功 | 7.4 μs | 138.9 μs | 快 18.8x |
| 错误 | 9.5 μs | 132.2 μs | 快 13.9x |
| 方法未找到 | 7.9 μs | 105.1 μs | 快 13.3x |
| 批量(20 个请求) | 144.3 μs | 2,760.0 μs | 快 19.1x |
序列化性能(均值,仅 zerodep)¶
jsonrpcserver 不暴露模型对象,因此序列化仅测试 zerodep。
| 操作 | 耗时 |
|---|---|
Request to_dict() |
300 ns |
Response to_dict() |
300 ns |
Request from_dict() |
700 ns |
Response from_dict() |
700 ns |
| 完整 JSON 往返 | 6.4 μs |
ID 生成(均值)¶
| 操作 | 耗时 |
|---|---|
next_id() |
93 ns |
要点总结¶
- 分发快约 13--19 倍 -- zerodep 在所有分发场景下大幅优于 jsonrpcserver,因为它避免了 jsonrpcserver 的 schema 验证开销和函数内省机制。
- 批量处理线性扩展 -- 20 个请求的批量测试展现了相同的约 19 倍加速,证实除处理函数本身外没有额外的逐请求开销。
- 序列化亚微秒级 -- 数据类
to_dict()/from_dict()相比完整分发极其轻量。 - ID 生成约 93 ns --
itertools.count开销几乎为零。
自行运行¶
pip install pytest pytest-benchmark jsonrpcserver
pytest jsonrpc/test_jsonrpc_benchmark.py --benchmark-only -v
最新 CI 结果¶
每次发版时通过 Benchmark CI 自动更新。