diff --git a/bench_test.go b/bench_test.go index a875ee8..51a7f16 100644 --- a/bench_test.go +++ b/bench_test.go @@ -277,6 +277,12 @@ func BenchmarkRivet_Param(b *testing.B) { r, _ := http.NewRequest("GET", "/user/gordon", nil) benchRequest(b, router, r) } +func BenchmarkSee_Param(b *testing.B) { + router := loadSeeSingle("GET", "/user/:name", seeHandle) + + r, _ := http.NewRequest("GET", "/user/gordon", nil) + benchRequest(b, router, r) +} func BenchmarkTango_Param(b *testing.B) { router := loadTangoSingle("GET", "/user/:name", tangoHandler) @@ -487,6 +493,12 @@ func BenchmarkRivet_Param5(b *testing.B) { r, _ := http.NewRequest("GET", fiveRoute, nil) benchRequest(b, router, r) } +func BenchmarkSee_Param5(b *testing.B) { + router := loadSeeSingle("GET", fiveColon, seeHandle) + + r, _ := http.NewRequest("GET", fiveRoute, nil) + benchRequest(b, router, r) +} func BenchmarkTango_Param5(b *testing.B) { router := loadTangoSingle("GET", fiveColon, tangoHandler) @@ -697,6 +709,12 @@ func BenchmarkRivet_Param20(b *testing.B) { r, _ := http.NewRequest("GET", twentyRoute, nil) benchRequest(b, router, r) } +func BenchmarkSee_Param20(b *testing.B) { + router := loadSeeSingle("GET", twentyColon, seeHandle) + + r, _ := http.NewRequest("GET", twentyRoute, nil) + benchRequest(b, router, r) +} func BenchmarkTango_Param20(b *testing.B) { router := loadTangoSingle("GET", twentyColon, tangoHandler) @@ -903,6 +921,12 @@ func BenchmarkRivet_ParamWrite(b *testing.B) { r, _ := http.NewRequest("GET", "/user/gordon", nil) benchRequest(b, router, r) } +func BenchmarkSee_ParamWrite(b *testing.B) { + router := loadSeeSingle("GET", "/user/:name", seeHandleWrite) + + r, _ := http.NewRequest("GET", "/user/gordon", nil) + benchRequest(b, router, r) +} func BenchmarkTango_ParamWrite(b *testing.B) { router := loadTangoSingle("GET", "/user/:name", tangoHandlerWrite) diff --git a/github_test.go b/github_test.go index 6f483cd..469a0ae 100644 --- a/github_test.go +++ b/github_test.go @@ -302,6 +302,7 @@ var ( githubR2router http.Handler githubRevel http.Handler githubRivet http.Handler + githubSee http.Handler githubTango http.Handler githubTigerTonic http.Handler githubTraffic http.Handler @@ -396,6 +397,9 @@ func init() { calcMem("Rivet", func() { githubRivet = loadRivet(githubAPI) }) + calcMem("See", func() { + githubSee = loadSee(githubAPI) + }) calcMem("Tango", func() { githubTango = loadTango(githubAPI) }) @@ -529,6 +533,10 @@ func BenchmarkRivet_GithubStatic(b *testing.B) { req, _ := http.NewRequest("GET", "/user/repos", nil) benchRequest(b, githubRivet, req) } +func BenchmarkSee_GithubStatic(b *testing.B) { + req, _ := http.NewRequest("GET", "/user/repos", nil) + benchRequest(b, githubSee, req) +} func BenchmarkTango_GithubStatic(b *testing.B) { req, _ := http.NewRequest("GET", "/user/repos", nil) benchRequest(b, githubTango, req) @@ -665,6 +673,10 @@ func BenchmarkRivet_GithubParam(b *testing.B) { req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil) benchRequest(b, githubRivet, req) } +func BenchmarkSee_GithubParam(b *testing.B) { + req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil) + benchRequest(b, githubSee, req) +} func BenchmarkTango_GithubParam(b *testing.B) { req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil) benchRequest(b, githubTango, req) @@ -773,6 +785,9 @@ func BenchmarkR2router_GithubAll(b *testing.B) { func BenchmarkRivet_GithubAll(b *testing.B) { benchRoutes(b, githubRivet, githubAPI) } +func BenchmarkSee_GithubAll(b *testing.B) { + benchRoutes(b, githubSee, githubAPI) +} func BenchmarkTango_GithubAll(b *testing.B) { benchRoutes(b, githubTango, githubAPI) } diff --git a/gplus_test.go b/gplus_test.go index b11699a..39b719c 100644 --- a/gplus_test.go +++ b/gplus_test.go @@ -64,6 +64,7 @@ var ( gplusR2router http.Handler gplusRevel http.Handler gplusRivet http.Handler + gplusSee http.Handler gplusTango http.Handler gplusTigerTonic http.Handler gplusTraffic http.Handler @@ -158,6 +159,9 @@ func init() { calcMem("Rivet", func() { gplusRivet = loadRivet(gplusAPI) }) + calcMem("See", func() { + gplusSee = loadSee(gplusAPI) + }) calcMem("Tango", func() { gplusTango = loadTango(gplusAPI) }) @@ -291,6 +295,10 @@ func BenchmarkRivet_GPlusStatic(b *testing.B) { req, _ := http.NewRequest("GET", "/people", nil) benchRequest(b, gplusRivet, req) } +func BenchmarkSee_GPlusStatic(b *testing.B) { + req, _ := http.NewRequest("GET", "/people", nil) + benchRequest(b, gplusSee, req) +} func BenchmarkTango_GPlusStatic(b *testing.B) { req, _ := http.NewRequest("GET", "/people", nil) benchRequest(b, gplusTango, req) @@ -427,6 +435,10 @@ func BenchmarkRivet_GPlusParam(b *testing.B) { req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil) benchRequest(b, gplusRivet, req) } +func BenchmarkSee_GPlusParam(b *testing.B) { + req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil) + benchRequest(b, gplusSee, req) +} func BenchmarkTango_GPlusParam(b *testing.B) { req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil) benchRequest(b, gplusTango, req) @@ -563,6 +575,10 @@ func BenchmarkRivet_GPlus2Params(b *testing.B) { req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil) benchRequest(b, gplusRivet, req) } +func BenchmarkSee_GPlus2Params(b *testing.B) { + req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil) + benchRequest(b, gplusSee, req) +} func BenchmarkTango_GPlus2Params(b *testing.B) { req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil) benchRequest(b, gplusTango, req) @@ -671,6 +687,9 @@ func BenchmarkR2router_GPlusAll(b *testing.B) { func BenchmarkRivet_GPlusAll(b *testing.B) { benchRoutes(b, gplusRivet, gplusAPI) } +func BenchmarkSee_GPlusAll(b *testing.B) { + benchRoutes(b, gplusSee, gplusAPI) +} func BenchmarkTango_GPlusAll(b *testing.B) { benchRoutes(b, gplusTango, gplusAPI) } diff --git a/parse_test.go b/parse_test.go index 51a6520..a00c596 100644 --- a/parse_test.go +++ b/parse_test.go @@ -84,6 +84,7 @@ var ( parseR2router http.Handler parseRevel http.Handler parseRivet http.Handler + parseSee http.Handler parseTango http.Handler parseTigerTonic http.Handler parseTraffic http.Handler @@ -178,6 +179,9 @@ func init() { calcMem("Rivet", func() { parseRivet = loadRivet(parseAPI) }) + calcMem("See", func() { + parseSee = loadSee(parseAPI) + }) calcMem("Tango", func() { parseTango = loadTango(parseAPI) }) @@ -311,6 +315,10 @@ func BenchmarkRivet_ParseStatic(b *testing.B) { req, _ := http.NewRequest("GET", "/1/users", nil) benchRequest(b, parseRivet, req) } +func BenchmarkSee_ParseStatic(b *testing.B) { + req, _ := http.NewRequest("GET", "/1/users", nil) + benchRequest(b, parseSee, req) +} func BenchmarkTango_ParseStatic(b *testing.B) { req, _ := http.NewRequest("GET", "/1/users", nil) benchRequest(b, parseTango, req) @@ -447,6 +455,10 @@ func BenchmarkRivet_ParseParam(b *testing.B) { req, _ := http.NewRequest("GET", "/1/classes/go", nil) benchRequest(b, parseRivet, req) } +func BenchmarkSee_ParseParam(b *testing.B) { + req, _ := http.NewRequest("GET", "/1/classes/go", nil) + benchRequest(b, parseSee, req) +} func BenchmarkTango_ParseParam(b *testing.B) { req, _ := http.NewRequest("GET", "/1/classes/go", nil) benchRequest(b, parseTango, req) @@ -583,6 +595,10 @@ func BenchmarkRivet_Parse2Params(b *testing.B) { req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil) benchRequest(b, parseRivet, req) } +func BenchmarkSee_Parse2Params(b *testing.B) { + req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil) + benchRequest(b, parseSee, req) +} func BenchmarkTango_Parse2Params(b *testing.B) { req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil) benchRequest(b, parseTango, req) @@ -691,6 +707,9 @@ func BenchmarkR2router_ParseAll(b *testing.B) { func BenchmarkRivet_ParseAll(b *testing.B) { benchRoutes(b, parseRivet, parseAPI) } +func BenchmarkSee_ParseAll(b *testing.B) { + benchRoutes(b, parseSee, parseAPI) +} func BenchmarkTango_ParseAll(b *testing.B) { benchRoutes(b, parseTango, parseAPI) } diff --git a/routers.go b/routers.go index c94f8fe..f26bd0a 100644 --- a/routers.go +++ b/routers.go @@ -52,6 +52,7 @@ import ( // "github.com/revel/pathtree" // "github.com/revel/revel" "github.com/aerogo/aero" + "github.com/junbin-yang/see" "github.com/typepress/rivet" "github.com/ursiform/bear" "github.com/vanng822/r2router" @@ -1455,6 +1456,40 @@ func loadRivetSingle(method, path string, handler interface{}) http.Handler { return router } +// See +func seeHandle(_ *see.Context) {} + +func seeHandleWrite(c *see.Context) { + io.WriteString(c.Writer, c.Param("name")) +} + +func seeHandleTest(c *see.Context) { + io.WriteString(c.Writer, c.RequestURI) +} + +func initSee() { + see.SetMode(see.ReleaseMode) +} + +func loadSee(routes []route) http.Handler { + h := seeHandle + if loadTestHandler { + h = seeHandleTest + } + + router := see.New() + for _, route := range routes { + router.Handle(route.method, route.path, h) + } + return router +} + +func loadSeeSingle(method, path string, handle see.HandlerFunc) http.Handler { + router := see.New() + router.Handle(method, path, handle) + return router +} + // Tango func tangoHandler(ctx *tango.Context) {} diff --git a/routers_test.go b/routers_test.go index ba49233..b1e7b28 100644 --- a/routers_test.go +++ b/routers_test.go @@ -45,6 +45,7 @@ var ( {"Traffic", loadTraffic}, {"Vulcan", loadVulcan}, // {"Zeus", loadZeus}, + {"See", loadSee}, } // all APIs diff --git a/static_test.go b/static_test.go index c11823f..d7c9045 100644 --- a/static_test.go +++ b/static_test.go @@ -200,6 +200,7 @@ var ( staticR2router http.Handler // staticRevel http.Handler staticRivet http.Handler + staticSee http.Handler staticTango http.Handler staticTigerTonic http.Handler staticTraffic http.Handler @@ -302,6 +303,9 @@ func init() { calcMem("Rivet", func() { staticRivet = loadRivet(staticRoutes) }) + calcMem("See", func() { + staticSee = loadSee(staticRoutes) + }) calcMem("Tango", func() { staticTango = loadTango(staticRoutes) }) @@ -411,6 +415,9 @@ func BenchmarkR2router_StaticAll(b *testing.B) { func BenchmarkRivet_StaticAll(b *testing.B) { benchRoutes(b, staticRivet, staticRoutes) } +func BenchmarkSee_StaticAll(b *testing.B) { + benchRoutes(b, staticSee, staticRoutes) +} func BenchmarkTango_StaticAll(b *testing.B) { benchRoutes(b, staticTango, staticRoutes) }