Skip to content

Commit 4241aab

Browse files
committed
Merge branch 'master' of github.com:julienschmidt/go-http-routing-benchmark
Conflicts: routers.go
2 parents 1463898 + 3ae8223 commit 4241aab

File tree

6 files changed

+815
-172
lines changed

6 files changed

+815
-172
lines changed

bench_test.go

Lines changed: 158 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,14 @@ func benchRoutes(b *testing.B, router http.Handler, routes []route) {
6565
// Micro Benchmarks
6666

6767
// Route with Param (no write)
68-
func BenchmarkTango_Param(b *testing.B) {
69-
router := loadTangoSingle("GET", "/user/:name", tangoHandler)
68+
func BenchmarkAce_Param(b *testing.B) {
69+
router := loadAceSingle("GET", "/user/:name", aceHandle)
70+
71+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
72+
benchRequest(b, router, r)
73+
}
74+
func BenchmarkBear_Param(b *testing.B) {
75+
router := loadBearSingle("GET", "/user/{name}", bearHandler)
7076

7177
r, _ := http.NewRequest("GET", "/user/gordon", nil)
7278
benchRequest(b, router, r)
@@ -84,11 +90,13 @@ func BenchmarkBone_Param(b *testing.B) {
8490
benchRequest(b, router, r)
8591
}
8692
func BenchmarkDenco_Param(b *testing.B) {
87-
handler := new(dencoHandler)
88-
router := loadDencoSingle(
89-
"GET", "/user/:name",
90-
handler, http.HandlerFunc(handler.Get),
91-
)
93+
router := loadDencoSingle("GET", "/user/:name", dencoHandler)
94+
95+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
96+
benchRequest(b, router, r)
97+
}
98+
func BenchmarkEcho_Param(b *testing.B) {
99+
router := loadEchoSingle("GET", "/user/:name", echoHandler)
92100

93101
r, _ := http.NewRequest("GET", "/user/gordon", nil)
94102
benchRequest(b, router, r)
@@ -151,6 +159,12 @@ func BenchmarkKocha_Param(b *testing.B) {
151159
r, _ := http.NewRequest("GET", "/user/gordon", nil)
152160
benchRequest(b, router, r)
153161
}
162+
func BenchmarkMacaron_Param(b *testing.B) {
163+
router := loadMacaronSingle("GET", "/user/:name", macaronHandler)
164+
165+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
166+
benchRequest(b, router, r)
167+
}
154168
func BenchmarkMartini_Param(b *testing.B) {
155169
router := loadMartiniSingle("GET", "/user/:name", martiniHandler)
156170

@@ -175,6 +189,12 @@ func BenchmarkRivet_Param(b *testing.B) {
175189
r, _ := http.NewRequest("GET", "/user/gordon", nil)
176190
benchRequest(b, router, r)
177191
}
192+
func BenchmarkTango_Param(b *testing.B) {
193+
router := loadTangoSingle("GET", "/user/:name", tangoHandler)
194+
195+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
196+
benchRequest(b, router, r)
197+
}
178198
func BenchmarkTigerTonic_Param(b *testing.B) {
179199
router := loadTigerTonicSingle("GET", "/user/{name}", httpHandlerFunc)
180200

@@ -187,14 +207,32 @@ func BenchmarkTraffic_Param(b *testing.B) {
187207
r, _ := http.NewRequest("GET", "/user/gordon", nil)
188208
benchRequest(b, router, r)
189209
}
210+
func BenchmarkVulcan_Param(b *testing.B) {
211+
router := loadVulcanSingle("GET", "/user/:name", vulcanHandler)
212+
213+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
214+
benchRequest(b, router, r)
215+
}
216+
func BenchmarkZeus_Param(b *testing.B) {
217+
router := loadZeusSingle("GET", "/user/:name", http.HandlerFunc(httpHandlerFunc))
218+
219+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
220+
benchRequest(b, router, r)
221+
}
190222

191223
// Route with 5 Params (no write)
192224
const fiveColon = "/:a/:b/:c/:d/:e"
193225
const fiveBrace = "/{a}/{b}/{c}/{d}/{e}"
194226
const fiveRoute = "/test/test/test/test/test"
195227

196-
func BenchmarkTango_Param5(b *testing.B) {
197-
router := loadTangoSingle("GET", fiveColon, tangoHandler)
228+
func BenchmarkAce_Param5(b *testing.B) {
229+
router := loadAceSingle("GET", fiveColon, aceHandle)
230+
231+
r, _ := http.NewRequest("GET", fiveRoute, nil)
232+
benchRequest(b, router, r)
233+
}
234+
func BenchmarkBear_Param5(b *testing.B) {
235+
router := loadBearSingle("GET", fiveBrace, bearHandler)
198236

199237
r, _ := http.NewRequest("GET", fiveRoute, nil)
200238
benchRequest(b, router, r)
@@ -212,11 +250,13 @@ func BenchmarkBone_Param5(b *testing.B) {
212250
benchRequest(b, router, r)
213251
}
214252
func BenchmarkDenco_Param5(b *testing.B) {
215-
handler := new(dencoHandler)
216-
router := loadDencoSingle(
217-
"GET", fiveColon,
218-
handler, http.HandlerFunc(handler.Get),
219-
)
253+
router := loadDencoSingle("GET", fiveColon, dencoHandler)
254+
255+
r, _ := http.NewRequest("GET", fiveRoute, nil)
256+
benchRequest(b, router, r)
257+
}
258+
func BenchmarkEcho_Param5(b *testing.B) {
259+
router := loadEchoSingle("GET", fiveColon, echoHandler)
220260

221261
r, _ := http.NewRequest("GET", fiveRoute, nil)
222262
benchRequest(b, router, r)
@@ -279,6 +319,12 @@ func BenchmarkKocha_Param5(b *testing.B) {
279319
r, _ := http.NewRequest("GET", fiveRoute, nil)
280320
benchRequest(b, router, r)
281321
}
322+
func BenchmarkMacaron_Param5(b *testing.B) {
323+
router := loadMacaronSingle("GET", fiveColon, macaronHandler)
324+
325+
r, _ := http.NewRequest("GET", fiveRoute, nil)
326+
benchRequest(b, router, r)
327+
}
282328
func BenchmarkMartini_Param5(b *testing.B) {
283329
router := loadMartiniSingle("GET", fiveColon, martiniHandler)
284330

@@ -288,7 +334,7 @@ func BenchmarkMartini_Param5(b *testing.B) {
288334
func BenchmarkPat_Param5(b *testing.B) {
289335
router := loadPatSingle("GET", fiveColon, http.HandlerFunc(httpHandlerFunc))
290336

291-
r, _ := http.NewRequest("GET", "/user/gordon", nil)
337+
r, _ := http.NewRequest("GET", fiveRoute, nil)
292338
benchRequest(b, router, r)
293339
}
294340
func BenchmarkRevel_Param5(b *testing.B) {
@@ -303,6 +349,12 @@ func BenchmarkRivet_Param5(b *testing.B) {
303349
r, _ := http.NewRequest("GET", fiveRoute, nil)
304350
benchRequest(b, router, r)
305351
}
352+
func BenchmarkTango_Param5(b *testing.B) {
353+
router := loadTangoSingle("GET", fiveColon, tangoHandler)
354+
355+
r, _ := http.NewRequest("GET", fiveRoute, nil)
356+
benchRequest(b, router, r)
357+
}
306358
func BenchmarkTigerTonic_Param5(b *testing.B) {
307359
router := loadTigerTonicSingle("GET", fiveBrace, httpHandlerFunc)
308360

@@ -315,14 +367,32 @@ func BenchmarkTraffic_Param5(b *testing.B) {
315367
r, _ := http.NewRequest("GET", fiveRoute, nil)
316368
benchRequest(b, router, r)
317369
}
370+
func BenchmarkVulcan_Param5(b *testing.B) {
371+
router := loadVulcanSingle("GET", fiveColon, vulcanHandler)
372+
373+
r, _ := http.NewRequest("GET", fiveRoute, nil)
374+
benchRequest(b, router, r)
375+
}
376+
func BenchmarkZeus_Param5(b *testing.B) {
377+
router := loadZeusSingle("GET", fiveColon, http.HandlerFunc(httpHandlerFunc))
378+
379+
r, _ := http.NewRequest("GET", fiveRoute, nil)
380+
benchRequest(b, router, r)
381+
}
318382

319383
// Route with 20 Params (no write)
320384
const twentyColon = "/:a/:b/:c/:d/:e/:f/:g/:h/:i/:j/:k/:l/:m/:n/:o/:p/:q/:r/:s/:t"
321385
const twentyBrace = "/{a}/{b}/{c}/{d}/{e}/{f}/{g}/{h}/{i}/{j}/{k}/{l}/{m}/{n}/{o}/{p}/{q}/{r}/{s}/{t}"
322386
const twentyRoute = "/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t"
323387

324-
func BenchmarkTango_Param20(b *testing.B) {
325-
router := loadTangoSingle("GET", twentyColon, tangoHandler)
388+
func BenchmarkAce_Param20(b *testing.B) {
389+
router := loadAceSingle("GET", twentyColon, aceHandle)
390+
391+
r, _ := http.NewRequest("GET", twentyRoute, nil)
392+
benchRequest(b, router, r)
393+
}
394+
func BenchmarkBear_Param20(b *testing.B) {
395+
router := loadBearSingle("GET", twentyBrace, bearHandler)
326396

327397
r, _ := http.NewRequest("GET", twentyRoute, nil)
328398
benchRequest(b, router, r)
@@ -340,11 +410,13 @@ func BenchmarkBone_Param20(b *testing.B) {
340410
benchRequest(b, router, r)
341411
}
342412
func BenchmarkDenco_Param20(b *testing.B) {
343-
handler := new(dencoHandler)
344-
router := loadDencoSingle(
345-
"GET", twentyColon,
346-
handler, http.HandlerFunc(handler.Get),
347-
)
413+
router := loadDencoSingle("GET", twentyColon, dencoHandler)
414+
415+
r, _ := http.NewRequest("GET", twentyRoute, nil)
416+
benchRequest(b, router, r)
417+
}
418+
func BenchmarkEcho_Param20(b *testing.B) {
419+
router := loadEchoSingle("GET", twentyColon, echoHandler)
348420

349421
r, _ := http.NewRequest("GET", twentyRoute, nil)
350422
benchRequest(b, router, r)
@@ -407,6 +479,12 @@ func BenchmarkKocha_Param20(b *testing.B) {
407479
r, _ := http.NewRequest("GET", twentyRoute, nil)
408480
benchRequest(b, router, r)
409481
}
482+
func BenchmarkMacaron_Param20(b *testing.B) {
483+
router := loadMacaronSingle("GET", twentyColon, macaronHandler)
484+
485+
r, _ := http.NewRequest("GET", twentyRoute, nil)
486+
benchRequest(b, router, r)
487+
}
410488
func BenchmarkMartini_Param20(b *testing.B) {
411489
router := loadMartiniSingle("GET", twentyColon, martiniHandler)
412490

@@ -416,7 +494,7 @@ func BenchmarkMartini_Param20(b *testing.B) {
416494
func BenchmarkPat_Param20(b *testing.B) {
417495
router := loadPatSingle("GET", twentyColon, http.HandlerFunc(httpHandlerFunc))
418496

419-
r, _ := http.NewRequest("GET", "/user/gordon", nil)
497+
r, _ := http.NewRequest("GET", twentyRoute, nil)
420498
benchRequest(b, router, r)
421499
}
422500
func BenchmarkRevel_Param20(b *testing.B) {
@@ -431,6 +509,12 @@ func BenchmarkRivet_Param20(b *testing.B) {
431509
r, _ := http.NewRequest("GET", twentyRoute, nil)
432510
benchRequest(b, router, r)
433511
}
512+
func BenchmarkTango_Param20(b *testing.B) {
513+
router := loadTangoSingle("GET", twentyColon, tangoHandler)
514+
515+
r, _ := http.NewRequest("GET", twentyRoute, nil)
516+
benchRequest(b, router, r)
517+
}
434518
func BenchmarkTigerTonic_Param20(b *testing.B) {
435519
router := loadTigerTonicSingle("GET", twentyBrace, httpHandlerFunc)
436520

@@ -443,10 +527,28 @@ func BenchmarkTraffic_Param20(b *testing.B) {
443527
r, _ := http.NewRequest("GET", twentyRoute, nil)
444528
benchRequest(b, router, r)
445529
}
530+
func BenchmarkVulcan_Param20(b *testing.B) {
531+
router := loadVulcanSingle("GET", twentyColon, vulcanHandler)
532+
533+
r, _ := http.NewRequest("GET", twentyRoute, nil)
534+
benchRequest(b, router, r)
535+
}
536+
func BenchmarkZeus_Param20(b *testing.B) {
537+
router := loadZeusSingle("GET", twentyColon, http.HandlerFunc(httpHandlerFunc))
538+
539+
r, _ := http.NewRequest("GET", twentyRoute, nil)
540+
benchRequest(b, router, r)
541+
}
446542

447543
// Route with Param and write
448-
func BenchmarkTango_ParamWrite(b *testing.B) {
449-
router := loadTangoSingle("GET", "/user/:name", tangoHandlerWrite)
544+
func BenchmarkAce_ParamWrite(b *testing.B) {
545+
router := loadAceSingle("GET", "/user/:name", aceHandleWrite)
546+
547+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
548+
benchRequest(b, router, r)
549+
}
550+
func BenchmarkBear_ParamWrite(b *testing.B) {
551+
router := loadBearSingle("GET", "/user/{name}", bearHandlerWrite)
450552

451553
r, _ := http.NewRequest("GET", "/user/gordon", nil)
452554
benchRequest(b, router, r)
@@ -464,11 +566,13 @@ func BenchmarkBone_ParamWrite(b *testing.B) {
464566
benchRequest(b, router, r)
465567
}
466568
func BenchmarkDenco_ParamWrite(b *testing.B) {
467-
handler := new(dencoHandler)
468-
router := loadDencoSingle(
469-
"GET", "/user/:name",
470-
handler, http.HandlerFunc(handler.dencoHandlerWrite),
471-
)
569+
router := loadDencoSingle("GET", "/user/:name", dencoHandlerWrite)
570+
571+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
572+
benchRequest(b, router, r)
573+
}
574+
func BenchmarkEcho_ParamWrite(b *testing.B) {
575+
router := loadEchoSingle("GET", "/user/:name", echoHandlerWrite)
472576

473577
r, _ := http.NewRequest("GET", "/user/gordon", nil)
474578
benchRequest(b, router, r)
@@ -531,6 +635,12 @@ func BenchmarkKocha_ParamWrite(b *testing.B) {
531635
r, _ := http.NewRequest("GET", "/user/gordon", nil)
532636
benchRequest(b, router, r)
533637
}
638+
func BenchmarkMacaron_ParamWrite(b *testing.B) {
639+
router := loadMacaronSingle("GET", "/user/:name", macaronHandlerWrite)
640+
641+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
642+
benchRequest(b, router, r)
643+
}
534644
func BenchmarkMartini_ParamWrite(b *testing.B) {
535645
router := loadMartiniSingle("GET", "/user/:name", martiniHandlerWrite)
536646

@@ -555,6 +665,12 @@ func BenchmarkRivet_ParamWrite(b *testing.B) {
555665
r, _ := http.NewRequest("GET", "/user/gordon", nil)
556666
benchRequest(b, router, r)
557667
}
668+
func BenchmarkTango_ParamWrite(b *testing.B) {
669+
router := loadTangoSingle("GET", "/user/:name", tangoHandlerWrite)
670+
671+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
672+
benchRequest(b, router, r)
673+
}
558674
func BenchmarkTigerTonic_ParamWrite(b *testing.B) {
559675
router := loadTigerTonicSingle(
560676
"GET", "/user/{name}",
@@ -570,3 +686,15 @@ func BenchmarkTraffic_ParamWrite(b *testing.B) {
570686
r, _ := http.NewRequest("GET", "/user/gordon", nil)
571687
benchRequest(b, router, r)
572688
}
689+
func BenchmarkVulcan_ParamWrite(b *testing.B) {
690+
router := loadVulcanSingle("GET", "/user/:name", vulcanHandlerWrite)
691+
692+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
693+
benchRequest(b, router, r)
694+
}
695+
func BenchmarkZeus_ParamWrite(b *testing.B) {
696+
router := loadZeusSingle("GET", "/user/:name", http.HandlerFunc(patHandlerWrite))
697+
698+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
699+
benchRequest(b, router, r)
700+
}

0 commit comments

Comments
 (0)