Ai
1 Star 0 Fork 0

jobily/go-http-routing-benchmark

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
bench_test.go 28.08 KB
一键复制 编辑 原始数据 按行查看 历史
dtmkeng 提交于 2019-10-23 00:49 +08:00 . add new framework Aero
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939
// Copyright 2013 Julien Schmidt. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be found
// in the LICENSE file.
package main
import (
"net/http"
"os"
"regexp"
"runtime"
"strings"
"testing"
)
var benchRe *regexp.Regexp
func isTested(name string) bool {
if benchRe == nil {
// Get -test.bench flag value (not accessible via flag package)
bench := ""
for _, arg := range os.Args {
if strings.HasPrefix(arg, "-test.bench=") {
// ignore the benchmark name after an underscore
bench = strings.SplitN(arg[12:], "_", 2)[0]
break
}
}
// Compile RegExp to match Benchmark names
var err error
benchRe, err = regexp.Compile(bench)
if err != nil {
panic(err.Error())
}
}
return benchRe.MatchString(name)
}
func calcMem(name string, load func()) {
if !isTested(name) {
return
}
m := new(runtime.MemStats)
// before
// force GC multiple times, since Go is using a generational GC
// TODO: find a better approach
runtime.GC()
runtime.GC()
runtime.GC()
runtime.GC()
runtime.ReadMemStats(m)
before := m.HeapAlloc
load()
// after
runtime.GC()
runtime.GC()
runtime.GC()
runtime.GC()
runtime.ReadMemStats(m)
after := m.HeapAlloc
println(" "+name+":", after-before, "Bytes")
}
func benchRequest(b *testing.B, router http.Handler, r *http.Request) {
w := new(mockResponseWriter)
u := r.URL
rq := u.RawQuery
r.RequestURI = u.RequestURI()
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
u.RawQuery = rq
router.ServeHTTP(w, r)
}
}
func benchRoutes(b *testing.B, router http.Handler, routes []route) {
w := new(mockResponseWriter)
r, _ := http.NewRequest("GET", "/", nil)
u := r.URL
rq := u.RawQuery
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
for _, route := range routes {
r.Method = route.method
r.RequestURI = route.path
u.Path = route.path
u.RawQuery = rq
router.ServeHTTP(w, r)
}
}
}
// Micro Benchmarks
// Route with Param (no write)
func BenchmarkAce_Param(b *testing.B) {
router := loadAceSingle("GET", "/user/:name", aceHandle)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkAero_Param(b *testing.B) {
router := loadAeroSingle("GET", "/user/:name", aeroHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkBear_Param(b *testing.B) {
router := loadBearSingle("GET", "/user/{name}", bearHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkBeego_Param(b *testing.B) {
router := loadBeegoSingle("GET", "/user/:name", beegoHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkBone_Param(b *testing.B) {
router := loadBoneSingle("GET", "/user/:name", http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkChi_Param(b *testing.B) {
router := loadChiSingle("GET", "/user/{name}", httpHandlerFunc)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkCloudyKitRouter_Param(b *testing.B) {
router := loadCloudyKitRouterSingle("GET", "/user/:name", cloudyKitRouterHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkDenco_Param(b *testing.B) {
router := loadDencoSingle("GET", "/user/:name", dencoHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkEcho_Param(b *testing.B) {
router := loadEchoSingle("GET", "/user/:name", echoHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGin_Param(b *testing.B) {
router := loadGinSingle("GET", "/user/:name", ginHandle)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGocraftWeb_Param(b *testing.B) {
router := loadGocraftWebSingle("GET", "/user/:name", gocraftWebHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGoji_Param(b *testing.B) {
router := loadGojiSingle("GET", "/user/:name", httpHandlerFunc)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGojiv2_Param(b *testing.B) {
router := loadGojiv2Single("GET", "/user/:name", gojiv2Handler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGoJsonRest_Param(b *testing.B) {
router := loadGoJsonRestSingle("GET", "/user/:name", goJsonRestHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGoRestful_Param(b *testing.B) {
router := loadGoRestfulSingle("GET", "/user/{name}", goRestfulHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGorillaMux_Param(b *testing.B) {
router := loadGorillaMuxSingle("GET", "/user/{name}", httpHandlerFunc)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGowwwRouter_Param(b *testing.B) {
router := loadGowwwRouterSingle("GET", "/user/:name", http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkHttpRouter_Param(b *testing.B) {
router := loadHttpRouterSingle("GET", "/user/:name", httpRouterHandle)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkHttpTreeMux_Param(b *testing.B) {
router := loadHttpTreeMuxSingle("GET", "/user/:name", httpTreeMuxHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkKocha_Param(b *testing.B) {
handler := new(kochaHandler)
router := loadKochaSingle(
"GET", "/user/:name",
handler, http.HandlerFunc(handler.Get),
)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkLARS_Param(b *testing.B) {
router := loadLARSSingle("GET", "/user/:name", larsHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkMacaron_Param(b *testing.B) {
router := loadMacaronSingle("GET", "/user/:name", macaronHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkMartini_Param(b *testing.B) {
router := loadMartiniSingle("GET", "/user/:name", martiniHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkPat_Param(b *testing.B) {
router := loadPatSingle("GET", "/user/:name", http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkPossum_Param(b *testing.B) {
router := loadPossumSingle("GET", "/user/:name", possumHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkR2router_Param(b *testing.B) {
router := loadR2routerSingle("GET", "/user/:name", r2routerHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
// func BenchmarkRevel_Param(b *testing.B) {
// router := loadRevelSingle("GET", "/user/:name", "RevelController.Handle")
// r, _ := http.NewRequest("GET", "/user/gordon", nil)
// benchRequest(b, router, r)
// }
func BenchmarkRivet_Param(b *testing.B) {
router := loadRivetSingle("GET", "/user/:name", rivetHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkTango_Param(b *testing.B) {
router := loadTangoSingle("GET", "/user/:name", tangoHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkTigerTonic_Param(b *testing.B) {
router := loadTigerTonicSingle("GET", "/user/{name}", httpHandlerFunc)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkTraffic_Param(b *testing.B) {
router := loadTrafficSingle("GET", "/user/:name", trafficHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkVulcan_Param(b *testing.B) {
router := loadVulcanSingle("GET", "/user/:name", vulcanHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
// func BenchmarkZeus_Param(b *testing.B) {
// router := loadZeusSingle("GET", "/user/:name", http.HandlerFunc(httpHandlerFunc))
// r, _ := http.NewRequest("GET", "/user/gordon", nil)
// benchRequest(b, router, r)
// }
// Route with 5 Params (no write)
const fiveColon = "/:a/:b/:c/:d/:e"
const fiveBrace = "/{a}/{b}/{c}/{d}/{e}"
const fiveRoute = "/test/test/test/test/test"
func BenchmarkAce_Param5(b *testing.B) {
router := loadAceSingle("GET", fiveColon, aceHandle)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkAero_Param5(b *testing.B) {
router := loadAeroSingle("GET", fiveColon, aeroHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkBear_Param5(b *testing.B) {
router := loadBearSingle("GET", fiveBrace, bearHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkBeego_Param5(b *testing.B) {
router := loadBeegoSingle("GET", fiveColon, beegoHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkBone_Param5(b *testing.B) {
router := loadBoneSingle("GET", fiveColon, http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkChi_Param5(b *testing.B) {
router := loadChiSingle("GET", fiveBrace, httpHandlerFunc)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkCloudyKitRouter_Param5(b *testing.B) {
router := loadCloudyKitRouterSingle("GET", fiveColon, cloudyKitRouterHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkDenco_Param5(b *testing.B) {
router := loadDencoSingle("GET", fiveColon, dencoHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkEcho_Param5(b *testing.B) {
router := loadEchoSingle("GET", fiveColon, echoHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGin_Param5(b *testing.B) {
router := loadGinSingle("GET", fiveColon, ginHandle)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGocraftWeb_Param5(b *testing.B) {
router := loadGocraftWebSingle("GET", fiveColon, gocraftWebHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGoji_Param5(b *testing.B) {
router := loadGojiSingle("GET", fiveColon, httpHandlerFunc)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGojiv2_Param5(b *testing.B) {
router := loadGojiv2Single("GET", fiveColon, gojiv2Handler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGoJsonRest_Param5(b *testing.B) {
handler := loadGoJsonRestSingle("GET", fiveColon, goJsonRestHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, handler, r)
}
func BenchmarkGoRestful_Param5(b *testing.B) {
router := loadGoRestfulSingle("GET", fiveBrace, goRestfulHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGorillaMux_Param5(b *testing.B) {
router := loadGorillaMuxSingle("GET", fiveBrace, httpHandlerFunc)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGowwwRouter_Param5(b *testing.B) {
router := loadGowwwRouterSingle("GET", fiveColon, http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkHttpRouter_Param5(b *testing.B) {
router := loadHttpRouterSingle("GET", fiveColon, httpRouterHandle)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkHttpTreeMux_Param5(b *testing.B) {
router := loadHttpTreeMuxSingle("GET", fiveColon, httpTreeMuxHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkKocha_Param5(b *testing.B) {
handler := new(kochaHandler)
router := loadKochaSingle(
"GET", fiveColon,
handler, http.HandlerFunc(handler.Get),
)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkLARS_Param5(b *testing.B) {
router := loadLARSSingle("GET", fiveColon, larsHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkMacaron_Param5(b *testing.B) {
router := loadMacaronSingle("GET", fiveColon, macaronHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkMartini_Param5(b *testing.B) {
router := loadMartiniSingle("GET", fiveColon, martiniHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkPat_Param5(b *testing.B) {
router := loadPatSingle("GET", fiveColon, http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkPossum_Param5(b *testing.B) {
router := loadPossumSingle("GET", fiveColon, possumHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkR2router_Param5(b *testing.B) {
router := loadR2routerSingle("GET", fiveColon, r2routerHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
// func BenchmarkRevel_Param5(b *testing.B) {
// router := loadRevelSingle("GET", fiveColon, "RevelController.Handle")
// r, _ := http.NewRequest("GET", fiveRoute, nil)
// benchRequest(b, router, r)
// }
func BenchmarkRivet_Param5(b *testing.B) {
router := loadRivetSingle("GET", fiveColon, rivetHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkTango_Param5(b *testing.B) {
router := loadTangoSingle("GET", fiveColon, tangoHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkTigerTonic_Param5(b *testing.B) {
router := loadTigerTonicSingle("GET", fiveBrace, httpHandlerFunc)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkTraffic_Param5(b *testing.B) {
router := loadTrafficSingle("GET", fiveColon, trafficHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkVulcan_Param5(b *testing.B) {
router := loadVulcanSingle("GET", fiveColon, vulcanHandler)
r, _ := http.NewRequest("GET", fiveRoute, nil)
benchRequest(b, router, r)
}
// func BenchmarkZeus_Param5(b *testing.B) {
// router := loadZeusSingle("GET", fiveColon, http.HandlerFunc(httpHandlerFunc))
// r, _ := http.NewRequest("GET", fiveRoute, nil)
// benchRequest(b, router, r)
// }
// Route with 20 Params (no write)
const twentyColon = "/:a/:b/:c/:d/:e/:f/:g/:h/:i/:j/:k/:l/:m/:n/:o/:p/:q/:r/:s/:t"
const twentyBrace = "/{a}/{b}/{c}/{d}/{e}/{f}/{g}/{h}/{i}/{j}/{k}/{l}/{m}/{n}/{o}/{p}/{q}/{r}/{s}/{t}"
const twentyRoute = "/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t"
func BenchmarkAce_Param20(b *testing.B) {
router := loadAceSingle("GET", twentyColon, aceHandle)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkAero_Param20(b *testing.B) {
router := loadAeroSingle("GET", twentyBrace, aeroHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkBear_Param20(b *testing.B) {
router := loadBearSingle("GET", twentyBrace, bearHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkBeego_Param20(b *testing.B) {
router := loadBeegoSingle("GET", twentyColon, beegoHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkBone_Param20(b *testing.B) {
router := loadBoneSingle("GET", twentyColon, http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkChi_Param20(b *testing.B) {
router := loadChiSingle("GET", twentyBrace, httpHandlerFunc)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkCloudyKitRouter_Param20(b *testing.B) {
router := loadCloudyKitRouterSingle("GET", twentyColon, cloudyKitRouterHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkDenco_Param20(b *testing.B) {
router := loadDencoSingle("GET", twentyColon, dencoHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkEcho_Param20(b *testing.B) {
router := loadEchoSingle("GET", twentyColon, echoHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGin_Param20(b *testing.B) {
router := loadGinSingle("GET", twentyColon, ginHandle)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGocraftWeb_Param20(b *testing.B) {
router := loadGocraftWebSingle("GET", twentyColon, gocraftWebHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGoji_Param20(b *testing.B) {
router := loadGojiSingle("GET", twentyColon, httpHandlerFunc)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGojiv2_Param20(b *testing.B) {
router := loadGojiv2Single("GET", twentyColon, gojiv2Handler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGoJsonRest_Param20(b *testing.B) {
handler := loadGoJsonRestSingle("GET", twentyColon, goJsonRestHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, handler, r)
}
func BenchmarkGoRestful_Param20(b *testing.B) {
handler := loadGoRestfulSingle("GET", twentyBrace, goRestfulHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, handler, r)
}
func BenchmarkGorillaMux_Param20(b *testing.B) {
router := loadGorillaMuxSingle("GET", twentyBrace, httpHandlerFunc)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkGowwwRouter_Param20(b *testing.B) {
router := loadGowwwRouterSingle("GET", twentyColon, http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkHttpRouter_Param20(b *testing.B) {
router := loadHttpRouterSingle("GET", twentyColon, httpRouterHandle)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkHttpTreeMux_Param20(b *testing.B) {
router := loadHttpTreeMuxSingle("GET", twentyColon, httpTreeMuxHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkKocha_Param20(b *testing.B) {
handler := new(kochaHandler)
router := loadKochaSingle(
"GET", twentyColon,
handler, http.HandlerFunc(handler.Get),
)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkLARS_Param20(b *testing.B) {
router := loadLARSSingle("GET", twentyColon, larsHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkMacaron_Param20(b *testing.B) {
router := loadMacaronSingle("GET", twentyColon, macaronHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkMartini_Param20(b *testing.B) {
router := loadMartiniSingle("GET", twentyColon, martiniHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkPat_Param20(b *testing.B) {
router := loadPatSingle("GET", twentyColon, http.HandlerFunc(httpHandlerFunc))
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkPossum_Param20(b *testing.B) {
router := loadPossumSingle("GET", twentyColon, possumHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkR2router_Param20(b *testing.B) {
router := loadR2routerSingle("GET", twentyColon, r2routerHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
// func BenchmarkRevel_Param20(b *testing.B) {
// router := loadRevelSingle("GET", twentyColon, "RevelController.Handle")
// r, _ := http.NewRequest("GET", twentyRoute, nil)
// benchRequest(b, router, r)
// }
func BenchmarkRivet_Param20(b *testing.B) {
router := loadRivetSingle("GET", twentyColon, rivetHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkTango_Param20(b *testing.B) {
router := loadTangoSingle("GET", twentyColon, tangoHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkTigerTonic_Param20(b *testing.B) {
router := loadTigerTonicSingle("GET", twentyBrace, httpHandlerFunc)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkTraffic_Param20(b *testing.B) {
router := loadTrafficSingle("GET", twentyColon, trafficHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
func BenchmarkVulcan_Param20(b *testing.B) {
router := loadVulcanSingle("GET", twentyColon, vulcanHandler)
r, _ := http.NewRequest("GET", twentyRoute, nil)
benchRequest(b, router, r)
}
// func BenchmarkZeus_Param20(b *testing.B) {
// router := loadZeusSingle("GET", twentyColon, http.HandlerFunc(httpHandlerFunc))
// r, _ := http.NewRequest("GET", twentyRoute, nil)
// benchRequest(b, router, r)
// }
// Route with Param and write
func BenchmarkAce_ParamWrite(b *testing.B) {
router := loadAceSingle("GET", "/user/:name", aceHandleWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkAero_ParamWrite(b *testing.B) {
router := loadAeroSingle("GET", "/user/:name", aeroHandlerTest)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkBear_ParamWrite(b *testing.B) {
router := loadBearSingle("GET", "/user/{name}", bearHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkBeego_ParamWrite(b *testing.B) {
router := loadBeegoSingle("GET", "/user/:name", beegoHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkBone_ParamWrite(b *testing.B) {
router := loadBoneSingle("GET", "/user/:name", http.HandlerFunc(boneHandlerWrite))
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkChi_ParamWrite(b *testing.B) {
router := loadChiSingle("GET", "/user/{name}", chiHandleWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkCloudyKitRouter_ParamWrite(b *testing.B) {
router := loadCloudyKitRouterSingle("GET", "/user/:name", cloudyKitRouterHandler)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkDenco_ParamWrite(b *testing.B) {
router := loadDencoSingle("GET", "/user/:name", dencoHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkEcho_ParamWrite(b *testing.B) {
router := loadEchoSingle("GET", "/user/:name", echoHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGin_ParamWrite(b *testing.B) {
router := loadGinSingle("GET", "/user/:name", ginHandleWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGocraftWeb_ParamWrite(b *testing.B) {
router := loadGocraftWebSingle("GET", "/user/:name", gocraftWebHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGoji_ParamWrite(b *testing.B) {
router := loadGojiSingle("GET", "/user/:name", gojiFuncWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGojiv2_ParamWrite(b *testing.B) {
router := loadGojiv2Single("GET", "/user/:name", gojiv2HandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGoJsonRest_ParamWrite(b *testing.B) {
handler := loadGoJsonRestSingle("GET", "/user/:name", goJsonRestHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, handler, r)
}
func BenchmarkGoRestful_ParamWrite(b *testing.B) {
handler := loadGoRestfulSingle("GET", "/user/{name}", goRestfulHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, handler, r)
}
func BenchmarkGorillaMux_ParamWrite(b *testing.B) {
router := loadGorillaMuxSingle("GET", "/user/{name}", gorillaHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkGowwwRouter_ParamWrite(b *testing.B) {
router := loadGowwwRouterSingle("GET", "/user/:name", http.HandlerFunc(gowwwRouterHandleWrite))
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkHttpRouter_ParamWrite(b *testing.B) {
router := loadHttpRouterSingle("GET", "/user/:name", httpRouterHandleWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkHttpTreeMux_ParamWrite(b *testing.B) {
router := loadHttpTreeMuxSingle("GET", "/user/:name", httpTreeMuxHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkKocha_ParamWrite(b *testing.B) {
handler := new(kochaHandler)
router := loadKochaSingle(
"GET", "/user/:name",
handler, http.HandlerFunc(handler.kochaHandlerWrite),
)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkLARS_ParamWrite(b *testing.B) {
router := loadLARSSingle("GET", "/user/:name", larsHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkMacaron_ParamWrite(b *testing.B) {
router := loadMacaronSingle("GET", "/user/:name", macaronHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkMartini_ParamWrite(b *testing.B) {
router := loadMartiniSingle("GET", "/user/:name", martiniHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkPat_ParamWrite(b *testing.B) {
router := loadPatSingle("GET", "/user/:name", http.HandlerFunc(patHandlerWrite))
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkPossum_ParamWrite(b *testing.B) {
router := loadPossumSingle("GET", "/user/:name", possumHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkR2router_ParamWrite(b *testing.B) {
router := loadR2routerSingle("GET", "/user/:name", r2routerHandleWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
// func BenchmarkRevel_ParamWrite(b *testing.B) {
// router := loadRevelSingle("GET", "/user/:name", "RevelController.HandleWrite")
// r, _ := http.NewRequest("GET", "/user/gordon", nil)
// benchRequest(b, router, r)
// }
func BenchmarkRivet_ParamWrite(b *testing.B) {
router := loadRivetSingle("GET", "/user/:name", rivetHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkTango_ParamWrite(b *testing.B) {
router := loadTangoSingle("GET", "/user/:name", tangoHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkTigerTonic_ParamWrite(b *testing.B) {
router := loadTigerTonicSingle(
"GET", "/user/{name}",
http.HandlerFunc(tigerTonicHandlerWrite),
)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkTraffic_ParamWrite(b *testing.B) {
router := loadTrafficSingle("GET", "/user/:name", trafficHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
func BenchmarkVulcan_ParamWrite(b *testing.B) {
router := loadVulcanSingle("GET", "/user/:name", vulcanHandlerWrite)
r, _ := http.NewRequest("GET", "/user/gordon", nil)
benchRequest(b, router, r)
}
// func BenchmarkZeus_ParamWrite(b *testing.B) {
// router := loadZeusSingle("GET", "/user/:name", zeusHandlerWrite)
// r, _ := http.NewRequest("GET", "/user/gordon", nil)
// benchRequest(b, router, r)
// }
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/hubo/go-http-routing-benchmark.git
git@gitee.com:hubo/go-http-routing-benchmark.git
hubo
go-http-routing-benchmark
go-http-routing-benchmark
master

搜索帮助