Skip to content

基准测试#

您应始终执行自己的基准测试,因为您的用例可能与其他人的用例不完全相同。不过,这里有一些通用基准测试来帮助您入门。

Go 性能#

Go 速度很快。与 Node.js 和 Python 相比,Go 通常更快,同时使用更少的内存并更好地处理并发。Techempower 基准测试 是进行通用比较的良好起点:

Techempower 基准测试

请注意,所有顶级框架都是用 Go 编写的。Huma 的性能和特性将根据使用的特定路由器或框架而异,但它通常与其它顶级 Go 框架相当。

突出显示几个就很说明问题,而且这忽略了内存使用方面的改进,这很可能意味着更便宜的硬件和容器成本:

Framework Language JSON Req/s Percentage Fortunes Req/s Percentage
Chi Go 520K 100% 150K 100%
Node.js Javascript 377K 73% 80K 53%
FastAPI Python 168K 32% 50K 33%
Django Python 73K 14% 15K 10%

要点#

以下是上述内容、其它基准测试以及我们使用 Go 的经验的一些要点:

  • Go(从而 Huma)速度快**且**内存占用低
  • Go 简单,团队可以**快速上手**。
    • 其复杂性**相当**或低于 Javascript 或 Python
  • Huma 是优于 Node.js、FastAPI 或 Django 的**良好选择**。

微基准测试#

自 Huma v1 以来,已经实现了显著的性能改进,如以下基本基准测试操作所示,该操作带有几个输入参数、一个小输入体、一些输出头和一个输出体(参见 adapters/humachi/humachi_test.go)。

# Huma v1
BenchmarkHumaV1Chi-10         16285  112086 ns/op  852209 B/op  258 allocs/op

# Huma v2
BenchmarkHumaV2Chi-10        431028    2777 ns/op    1718 B/op   29 allocs/op

# Chi without Huma (raw)
BenchmarkRawChi-10           552764    2143 ns/op    2370 B/op   29 allocs/op

这些改进归因于多种因素,包括对 Huma API 的更改、在可能的情况下预计算反射数据、低分配或零分配验证和 URL 解析、使用共享缓冲池来限制垃圾收集器压力,以及更多其他因素。

由于您自带路由器,您可以自由地“绕过” Huma 直接使用路由器,但如上所示,在 v2 中很少需要这样做。