بنچمارکها
دادههای بهروز: این بنچمارکها در مارس ۲۰۲۶ با استفاده از Gin v1.12.0 و Go 1.25.8 جمعآوری شدهاند. برای مشاهده نتایج بهروز بنچمارک، مخزن go-http-routing-benchmark را ببینید.
گزارش بنچمارک Gin
محیط آزمایش:
- پلتفرم میزبان: Apple M4 Pro
- مشخصات دستگاه: macOS (Darwin 25.3.0), arm64
- تاریخ آزمایش: ۱۵ مارس ۲۰۲۶
- نسخه Gin: v1.12.0
- نسخه Go: 1.25.8 (darwin/arm64)
- منبع بنچمارکها: Go HTTP Router Benchmark
خلاصه
جدول زیر تمام مسیریابها را بر اساس توان عملیاتی GitHub API (۲۰۳ مسیر، تمام متدها) رتبهبندی میکند که بهترین نمایانگر بارهای کاری واقعی مسیریابی است. مقدار ns/op کمتر بهتر است.
| Rank | Router | ns/op | B/op | allocs/op | Zero-alloc |
|---|---|---|---|---|---|
| 1 | Gin | 9,944 | 0 | 0 | ✓ |
| 2 | BunRouter | 10,281 | 0 | 0 | ✓ |
| 3 | Echo | 11,072 | 0 | 0 | ✓ |
| 4 | HttpRouter | 15,059 | 13,792 | 167 | |
| 5 | HttpTreeMux | 49,302 | 65,856 | 671 | |
| 6 | Chi | 94,376 | 130,817 | 740 | |
| 7 | Beego | 101,941 | 71,456 | 609 | |
| 8 | Fiber | 109,148 | 0 | 0 | ✓ |
| 9 | Macaron | 121,785 | 147,784 | 1,624 | |
| 10 | Goji v2 | 242,849 | 313,744 | 3,712 | |
| 11 | GoRestful | 885,678 | 1,006,744 | 3,009 | |
| 12 | GorillaMux | 1,316,844 | 225,667 | 1,588 |
نکات کلیدی:
- Gin، BunRouter و Echo در رده بالا قرار دارند — همگی بدون تخصیص حافظه heap عمل میکنند و کل GitHub API را در حدود ۱۰ میکروثانیه مسیریابی میکنند.
- HttpRouter همچنان بسیار سریع است اما به ازای هر مسیر پارامتردار ۱ تخصیص حافظه دارد (۱۶۷ تخصیص برای ۲۰۳ مسیر).
- Fiber نیز بدون تخصیص حافظه عمل میکند، اما زیرساخت بنچمارک مبتنی بر fasthttp آن، سربار بازنشانی در هر تکرار اضافه میکند — مقایسه مستقیم با مسیریابهای net/http نیازمند احتیاط است.
- GorillaMux و GoRestful از نظر قابلیتها غنی هستند اما مرتبههایی کندتر عمل میکنند و برای برنامههای حساس به تأخیر مناسب نیستند.
نکته درباره Fiber: بنچمارکهای Fiber از
fasthttp.RequestCtxبا بازنشانی در هر تکرار استفاده میکنند که سربار ثابتی اضافه میکند که در بنچمارکهای net/http وجود ندارد. مقایسههای Fiber-با-Fiber معتبر هستند؛ مقایسههای بین فریمورکها باید با دقت تفسیر شوند.
مصرف حافظه
حافظه مورد نیاز برای بارگذاری ساختار مسیریابی (کمتر بهتر است). بر اساس بایت به ترتیب صعودی مرتب شده است.
مسیرهای ثابت: 157
| Router | Bytes |
|---|---|
| HttpRouter | 21,680 |
| Gin | 34,408 |
| Macaron | 36,976 |
| BunRouter | 51,232 |
| Fiber | 59,248 |
| HttpServeMux | 71,728 |
| HttpTreeMux | 73,448 |
| Chi | 83,160 |
| Echo | 91,976 |
| Beego | 98,824 |
| Goji v2 | 117,952 |
| GorillaMux | 599,496 |
| GoRestful | 819,704 |
مسیرهای GitHub API: 203
| Router | Bytes |
|---|---|
| HttpRouter | 37,072 |
| Gin | 58,840 |
| HttpTreeMux | 78,800 |
| Macaron | 90,632 |
| BunRouter | 93,776 |
| Chi | 94,888 |
| Echo | 117,784 |
| Goji v2 | 118,640 |
| Beego | 150,840 |
| Fiber | 163,832 |
| GoRestful | 1,270,848 |
| GorillaMux | 1,319,696 |
مسیرهای Google+ API: 13
| Router | Bytes |
|---|---|
| HttpRouter | 2,776 |
| Gin | 4,576 |
| BunRouter | 7,360 |
| HttpTreeMux | 7,440 |
| Chi | 8,008 |
| Goji v2 | 8,096 |
| Macaron | 8,672 |
| Beego | 10,256 |
| Fiber | 10,840 |
| Echo | 10,968 |
| GorillaMux | 68,000 |
| GoRestful | 72,536 |
مسیرهای Parse API: 26
| Router | Bytes |
|---|---|
| HttpRouter | 5,024 |
| Gin | 7,896 |
| HttpTreeMux | 7,848 |
| BunRouter | 9,336 |
| Chi | 9,656 |
| Echo | 13,816 |
| Macaron | 13,704 |
| Fiber | 15,352 |
| Goji v2 | 16,064 |
| Beego | 19,256 |
| GorillaMux | 105,384 |
| GoRestful | 121,200 |
نتایج بنچمارک
GitHub API (۲۰۳ مسیر)
مسیریابی تمام ۲۰۳ نقطه پایانی GitHub API در هر عملیات.
| Rank | Router | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| 1 | Gin | 9,944 | 0 | 0 |
| 2 | BunRouter | 10,281 | 0 | 0 |
| 3 | Echo | 11,072 | 0 | 0 |
| 4 | HttpRouter | 15,059 | 13,792 | 167 |
| 5 | HttpTreeMux | 49,302 | 65,856 | 671 |
| 6 | Chi | 94,376 | 130,817 | 740 |
| 7 | Beego | 101,941 | 71,456 | 609 |
| 8 | Fiber | 109,148 | 0 | 0 |
| 9 | Macaron | 121,785 | 147,784 | 1,624 |
| 10 | Goji v2 | 242,849 | 313,744 | 3,712 |
| 11 | GoRestful | 885,678 | 1,006,744 | 3,009 |
| 12 | GorillaMux | 1,316,844 | 225,667 | 1,588 |
Google+ API (۱۳ مسیر)
مسیریابی تمام ۱۳ نقطه پایانی Google+ API در هر عملیات.
| Rank | Router | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| 1 | BunRouter | 348.5 | 0 | 0 |
| 2 | Gin | 429.7 | 0 | 0 |
| 3 | Echo | 451.1 | 0 | 0 |
| 4 | HttpRouter | 668.6 | 640 | 11 |
| 5 | HttpTreeMux | 2,428 | 4,032 | 38 |
| 6 | Fiber | 2,506 | 0 | 0 |
| 7 | Chi | 5,333 | 8,480 | 48 |
| 8 | Beego | 5,927 | 4,576 | 39 |
| 9 | Macaron | 7,294 | 9,464 | 104 |
| 10 | Goji v2 | 8,000 | 15,120 | 115 |
| 11 | GorillaMux | 14,707 | 14,448 | 102 |
| 12 | GoRestful | 24,189 | 60,720 | 193 |
Parse API (۲۶ مسیر)
مسیریابی تمام ۲۶ نقطه پایانی Parse API در هر عملیات.
| Rank | Router | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| 1 | BunRouter | 588.2 | 0 | 0 |
| 2 | Gin | 712.1 | 0 | 0 |
| 3 | Echo | 742.1 | 0 | 0 |
| 4 | HttpRouter | 948.5 | 640 | 16 |
| 5 | HttpTreeMux | 3,372 | 5,728 | 51 |
| 6 | Fiber | 4,250 | 0 | 0 |
| 7 | Chi | 8,863 | 14,944 | 84 |
| 8 | Beego | 10,541 | 9,152 | 78 |
| 9 | Macaron | 13,635 | 18,928 | 208 |
| 10 | Goji v2 | 13,264 | 29,456 | 199 |
| 11 | GorillaMux | 25,886 | 26,960 | 198 |
| 12 | GoRestful | 54,780 | 131,728 | 380 |
مسیرهای ثابت (۱۵۷ مسیر)
مسیریابی تمام ۱۵۷ مسیر ثابت در هر عملیات. شامل http.ServeMux به عنوان خط مبنا.
| Rank | Router | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| 1 | HttpRouter | 4,177 | 0 | 0 |
| 2 | HttpTreeMux | 5,363 | 0 | 0 |
| 3 | Gin | 5,528 | 0 | 0 |
| 4 | BunRouter | 5,997 | 0 | 0 |
| 5 | Echo | 6,897 | 0 | 0 |
| — | HttpServeMux | 18,172 | 0 | 0 |
| 6 | Fiber | 29,310 | 0 | 0 |
| 7 | Chi | 41,317 | 57,776 | 314 |
| 8 | Beego | 68,255 | 55,264 | 471 |
| 9 | Macaron | 81,824 | 114,296 | 1,256 |
| 10 | Goji v2 | 84,459 | 175,840 | 1,099 |
| 11 | GorillaMux | 302,825 | 133,137 | 1,099 |
| 12 | GoRestful | 436,510 | 677,824 | 2,193 |
بنچمارکهای خُرد
پارامتر تکی
مسیر: /user/:name — درخواست: GET /user/gordon
| Rank | Router | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| 1 | BunRouter | 12.22 | 0 | 0 |
| 2 | Echo | 17.75 | 0 | 0 |
| 3 | Gin | 23.31 | 0 | 0 |
| 4 | HttpRouter | 31.88 | 32 | 1 |
| 5 | Fiber | 114.4 | 0 | 0 |
| 6 | HttpTreeMux | 165.0 | 352 | 3 |
| 7 | Chi | 332.2 | 704 | 4 |
| 8 | Beego | 348.8 | 352 | 3 |
| 9 | Goji v2 | 494.3 | 1,136 | 8 |
| 10 | GorillaMux | 630.6 | 1,152 | 8 |
| 11 | Macaron | 708.0 | 1,064 | 10 |
| 12 | GoRestful | 1,394 | 4,600 | 15 |
۵ پارامتر
مسیر: /:a/:b/:c/:d/:e — درخواست: GET /test/test/test/test/test
| Rank | Router | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| 1 | BunRouter | 41.86 | 0 | 0 |
| 2 | Echo | 43.76 | 0 | 0 |
| 3 | Gin | 44.20 | 0 | 0 |
| 4 | HttpRouter | 83.74 | 160 | 1 |
| 5 | Fiber | 271.6 | 0 | 0 |
| 6 | HttpTreeMux | 358.8 | 576 | 6 |
| 7 | Chi | 453.7 | 704 | 4 |
| 8 | Beego | 480.3 | 352 | 3 |
| 9 | Goji v2 | 532.4 | 1,200 | 8 |
| 10 | Macaron | 799.7 | 1,064 | 10 |
| 11 | GorillaMux | 972.6 | 1,216 | 8 |
| 12 | GoRestful | 1,579 | 4,712 | 15 |
۲۰ پارامتر
مسیر: /:a/:b/.../:t (۲۰ بخش) — درخواست: GET /a/b/.../t
| Rank | Router | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| 1 | Gin | 121.7 | 0 | 0 |
| 2 | Echo | 127.5 | 0 | 0 |
| 3 | BunRouter | 211.4 | 0 | 0 |
| 4 | HttpRouter | 290.2 | 704 | 1 |
| 5 | Fiber | 466.1 | 0 | 0 |
| 6 | Goji v2 | 745.3 | 1,440 | 8 |
| 7 | Beego | 1,099 | 352 | 3 |
| 8 | Chi | 1,805 | 2,504 | 9 |
| 9 | HttpTreeMux | 1,857 | 3,144 | 13 |
| 10 | Macaron | 2,058 | 2,864 | 15 |
| 11 | GorillaMux | 2,223 | 3,272 | 13 |
| 12 | GoRestful | 3,337 | 7,008 | 20 |
نوشتن پارامتر
مسیر: /user/:name با نوشتن پاسخ — درخواست: GET /user/gordon
| Rank | Router | ns/op | B/op | allocs/op |
|---|---|---|---|---|
| 1 | BunRouter | 25.86 | 0 | 0 |
| 2 | Gin | 27.65 | 0 | 0 |
| 3 | HttpRouter | 37.40 | 32 | 1 |
| 4 | Echo | 47.94 | 8 | 1 |
| 5 | Fiber | 125.7 | 0 | 0 |
| 6 | HttpTreeMux | 180.4 | 352 | 3 |
| 7 | Chi | 348.3 | 704 | 4 |
| 8 | Beego | 386.1 | 360 | 4 |
| 9 | Goji v2 | 516.9 | 1,168 | 10 |
| 10 | GorillaMux | 665.5 | 1,152 | 8 |
| 11 | Macaron | 784.3 | 1,112 | 13 |
| 12 | GoRestful | 1,534 | 4,608 | 16 |