Skip to content

Commit 11a0bed

Browse files
committed
Add squiidz/bone
1 parent 38e5097 commit 11a0bed

File tree

6 files changed

+126
-0
lines changed

6 files changed

+126
-0
lines changed

bench_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ func BenchmarkBeego_Param(b *testing.B) {
7171
r, _ := http.NewRequest("GET", "/user/gordon", nil)
7272
benchRequest(b, router, r)
7373
}
74+
func BenchmarkBone_Param(b *testing.B) {
75+
router := loadBoneSingle("GET", "/user/:name", http.HandlerFunc(httpHandlerFunc))
76+
77+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
78+
benchRequest(b, router, r)
79+
}
7480
func BenchmarkDenco_Param(b *testing.B) {
7581
handler := new(dencoHandler)
7682
router := loadDencoSingle(
@@ -187,6 +193,12 @@ func BenchmarkBeego_Param5(b *testing.B) {
187193
r, _ := http.NewRequest("GET", fiveRoute, nil)
188194
benchRequest(b, router, r)
189195
}
196+
func BenchmarkBone_Param5(b *testing.B) {
197+
router := loadBoneSingle("GET", fiveColon, http.HandlerFunc(httpHandlerFunc))
198+
199+
r, _ := http.NewRequest("GET", fiveRoute, nil)
200+
benchRequest(b, router, r)
201+
}
190202
func BenchmarkDenco_Param5(b *testing.B) {
191203
handler := new(dencoHandler)
192204
router := loadDencoSingle(
@@ -303,6 +315,12 @@ func BenchmarkBeego_Param20(b *testing.B) {
303315
r, _ := http.NewRequest("GET", twentyRoute, nil)
304316
benchRequest(b, router, r)
305317
}
318+
func BenchmarkBone_Param20(b *testing.B) {
319+
router := loadBoneSingle("GET", twentyColon, http.HandlerFunc(httpHandlerFunc))
320+
321+
r, _ := http.NewRequest("GET", twentyRoute, nil)
322+
benchRequest(b, router, r)
323+
}
306324
func BenchmarkDenco_Param20(b *testing.B) {
307325
handler := new(dencoHandler)
308326
router := loadDencoSingle(
@@ -415,6 +433,12 @@ func BenchmarkBeego_ParamWrite(b *testing.B) {
415433
r, _ := http.NewRequest("GET", "/user/gordon", nil)
416434
benchRequest(b, router, r)
417435
}
436+
func BenchmarkBone_ParamWrite(b *testing.B) {
437+
router := loadBoneSingle("GET", "/user/:name", http.HandlerFunc(patHandlerWrite))
438+
439+
r, _ := http.NewRequest("GET", "/user/gordon", nil)
440+
benchRequest(b, router, r)
441+
}
418442
func BenchmarkDenco_ParamWrite(b *testing.B) {
419443
handler := new(dencoHandler)
420444
router := loadDencoSingle(

github_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ var githubAPI = []route{
275275

276276
var (
277277
githubBeego http.Handler
278+
githubBone http.Handler
278279
githubDenco http.Handler
279280
githubGin http.Handler
280281
githubGocraftWeb http.Handler
@@ -299,6 +300,9 @@ func init() {
299300
calcMem("Beego", func() {
300301
githubBeego = loadBeego(githubAPI)
301302
})
303+
calcMem("Bone", func() {
304+
githubBone = loadBone(githubAPI)
305+
})
302306
calcMem("Denco", func() {
303307
githubDenco = loadDenco(githubAPI)
304308
})
@@ -356,6 +360,10 @@ func BenchmarkBeego_GithubStatic(b *testing.B) {
356360
req, _ := http.NewRequest("GET", "/user/repos", nil)
357361
benchRequest(b, githubBeego, req)
358362
}
363+
func BenchmarkBone_GithubStatic(b *testing.B) {
364+
req, _ := http.NewRequest("GET", "/user/repos", nil)
365+
benchRequest(b, githubBone, req)
366+
}
359367
func BenchmarkDenco_GithubStatic(b *testing.B) {
360368
req, _ := http.NewRequest("GET", "/user/repos", nil)
361369
benchRequest(b, githubDenco, req)
@@ -426,6 +434,10 @@ func BenchmarkBeego_GithubParam(b *testing.B) {
426434
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
427435
benchRequest(b, githubBeego, req)
428436
}
437+
func BenchmarkBone_GithubParam(b *testing.B) {
438+
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
439+
benchRequest(b, githubBone, req)
440+
}
429441
func BenchmarkDenco_GithubParam(b *testing.B) {
430442
req, _ := http.NewRequest("GET", "/repos/julienschmidt/httprouter/stargazers", nil)
431443
benchRequest(b, githubDenco, req)
@@ -495,6 +507,9 @@ func BenchmarkTraffic_GithubParam(b *testing.B) {
495507
func BenchmarkBeego_GithubAll(b *testing.B) {
496508
benchRoutes(b, githubBeego, githubAPI)
497509
}
510+
func BenchmarkBone_GithubAll(b *testing.B) {
511+
benchRoutes(b, githubBone, githubAPI)
512+
}
498513
func BenchmarkDenco_GithubAll(b *testing.B) {
499514
benchRoutes(b, githubDenco, githubAPI)
500515
}

gplus_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ var gplusAPI = []route{
3737

3838
var (
3939
gplusBeego http.Handler
40+
gplusBone http.Handler
4041
gplusDenco http.Handler
4142
gplusGin http.Handler
4243
gplusGocraftWeb http.Handler
@@ -61,6 +62,9 @@ func init() {
6162
calcMem("Beego", func() {
6263
gplusBeego = loadBeego(gplusAPI)
6364
})
65+
calcMem("Bone", func() {
66+
gplusBone = loadBone(gplusAPI)
67+
})
6468
calcMem("Denco", func() {
6569
gplusDenco = loadDenco(gplusAPI)
6670
})
@@ -118,6 +122,10 @@ func BenchmarkBeego_GPlusStatic(b *testing.B) {
118122
req, _ := http.NewRequest("GET", "/people", nil)
119123
benchRequest(b, gplusBeego, req)
120124
}
125+
func BenchmarkBone_GPlusStatic(b *testing.B) {
126+
req, _ := http.NewRequest("GET", "/people", nil)
127+
benchRequest(b, gplusBone, req)
128+
}
121129
func BenchmarkDenco_GPlusStatic(b *testing.B) {
122130
req, _ := http.NewRequest("GET", "/people", nil)
123131
benchRequest(b, gplusDenco, req)
@@ -188,6 +196,10 @@ func BenchmarkBeego_GPlusParam(b *testing.B) {
188196
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
189197
benchRequest(b, gplusBeego, req)
190198
}
199+
func BenchmarkBone_GPlusParam(b *testing.B) {
200+
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
201+
benchRequest(b, gplusBone, req)
202+
}
191203
func BenchmarkDenco_GPlusParam(b *testing.B) {
192204
req, _ := http.NewRequest("GET", "/people/118051310819094153327", nil)
193205
benchRequest(b, gplusDenco, req)
@@ -258,6 +270,10 @@ func BenchmarkBeego_GPlus2Params(b *testing.B) {
258270
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
259271
benchRequest(b, gplusBeego, req)
260272
}
273+
func BenchmarkBone_GPlus2Params(b *testing.B) {
274+
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
275+
benchRequest(b, gplusBone, req)
276+
}
261277
func BenchmarkDenco_GPlus2Params(b *testing.B) {
262278
req, _ := http.NewRequest("GET", "/people/118051310819094153327/activities/123456789", nil)
263279
benchRequest(b, gplusDenco, req)
@@ -327,6 +343,9 @@ func BenchmarkTraffic_GPlus2Params(b *testing.B) {
327343
func BenchmarkBeego_GPlusAll(b *testing.B) {
328344
benchRoutes(b, gplusBeego, gplusAPI)
329345
}
346+
func BenchmarkBone_GPlusAll(b *testing.B) {
347+
benchRoutes(b, gplusBone, gplusAPI)
348+
}
330349
func BenchmarkDenco_GPlusAll(b *testing.B) {
331350
benchRoutes(b, gplusDenco, gplusAPI)
332351
}

parse_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ var parseAPI = []route{
5757

5858
var (
5959
parseBeego http.Handler
60+
parseBone http.Handler
6061
parseDenco http.Handler
6162
parseGin http.Handler
6263
parseGocraftWeb http.Handler
@@ -81,6 +82,9 @@ func init() {
8182
calcMem("Beego", func() {
8283
parseBeego = loadBeego(parseAPI)
8384
})
85+
calcMem("Bone", func() {
86+
parseBone = loadBone(parseAPI)
87+
})
8488
calcMem("Denco", func() {
8589
parseDenco = loadDenco(parseAPI)
8690
})
@@ -138,6 +142,10 @@ func BenchmarkBeego_ParseStatic(b *testing.B) {
138142
req, _ := http.NewRequest("GET", "/1/users", nil)
139143
benchRequest(b, parseBeego, req)
140144
}
145+
func BenchmarkBone_ParseStatic(b *testing.B) {
146+
req, _ := http.NewRequest("GET", "/1/users", nil)
147+
benchRequest(b, parseBone, req)
148+
}
141149
func BenchmarkDenco_ParseStatic(b *testing.B) {
142150
req, _ := http.NewRequest("GET", "/1/users", nil)
143151
benchRequest(b, parseDenco, req)
@@ -208,6 +216,10 @@ func BenchmarkBeego_ParseParam(b *testing.B) {
208216
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
209217
benchRequest(b, parseBeego, req)
210218
}
219+
func BenchmarkBone_ParseParam(b *testing.B) {
220+
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
221+
benchRequest(b, parseBone, req)
222+
}
211223
func BenchmarkDenco_ParseParam(b *testing.B) {
212224
req, _ := http.NewRequest("GET", "/1/classes/go", nil)
213225
benchRequest(b, parseDenco, req)
@@ -278,6 +290,10 @@ func BenchmarkBeego_Parse2Params(b *testing.B) {
278290
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
279291
benchRequest(b, parseBeego, req)
280292
}
293+
func BenchmarkBone_Parse2Params(b *testing.B) {
294+
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
295+
benchRequest(b, parseBone, req)
296+
}
281297
func BenchmarkDenco_Parse2Params(b *testing.B) {
282298
req, _ := http.NewRequest("GET", "/1/classes/go/123456789", nil)
283299
benchRequest(b, parseDenco, req)
@@ -347,6 +363,9 @@ func BenchmarkTraffic_Parse2Params(b *testing.B) {
347363
func BenchmarkBeego_ParseAll(b *testing.B) {
348364
benchRoutes(b, parseBeego, parseAPI)
349365
}
366+
func BenchmarkBone_ParseAll(b *testing.B) {
367+
benchRoutes(b, parseBone, parseAPI)
368+
}
350369
func BenchmarkDenco_ParseAll(b *testing.B) {
351370
benchRoutes(b, parseDenco, parseAPI)
352371
}

routers.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/rcrowley/go-tigertonic"
3232
"github.com/revel/revel"
3333
"github.com/robfig/pathtree"
34+
"github.com/squiidz/bone"
3435
"github.com/typepress/rivet"
3536
goji "github.com/zenazn/goji/web"
3637
)
@@ -131,6 +132,47 @@ func loadBeegoSingle(method, path string, handler beego.FilterFunc) http.Handler
131132
return app
132133
}
133134

135+
// bone
136+
func loadBone(routes []route) http.Handler {
137+
router := bone.New()
138+
for _, route := range routes {
139+
switch route.method {
140+
case "GET":
141+
router.Get(route.path, http.HandlerFunc(httpHandlerFunc))
142+
case "POST":
143+
router.Post(route.path, http.HandlerFunc(httpHandlerFunc))
144+
case "PUT":
145+
router.Put(route.path, http.HandlerFunc(httpHandlerFunc))
146+
case "PATCH":
147+
router.Patch(route.path, http.HandlerFunc(httpHandlerFunc))
148+
case "DELETE":
149+
router.Delete(route.path, http.HandlerFunc(httpHandlerFunc))
150+
default:
151+
panic("Unknow HTTP method: " + route.method)
152+
}
153+
}
154+
return router
155+
}
156+
157+
func loadBoneSingle(method, path string, handler http.Handler) http.Handler {
158+
router := bone.New()
159+
switch method {
160+
case "GET":
161+
router.Get(path, handler)
162+
case "POST":
163+
router.Post(path, handler)
164+
case "PUT":
165+
router.Put(path, handler)
166+
case "PATCH":
167+
router.Patch(path, handler)
168+
case "DELETE":
169+
router.Delete(path, handler)
170+
default:
171+
panic("Unknow HTTP method: " + method)
172+
}
173+
return router
174+
}
175+
134176
// Denco
135177
type dencoHandler struct {
136178
routerMap map[string]*denco.Router

static_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ var (
173173
staticHttpServeMux http.Handler
174174

175175
staticBeego http.Handler
176+
staticBone http.Handler
176177
staticDenco http.Handler
177178
staticGin http.Handler
178179
staticGocraftWeb http.Handler
@@ -205,6 +206,9 @@ func init() {
205206
calcMem("Beego", func() {
206207
staticBeego = loadBeego(staticRoutes)
207208
})
209+
calcMem("Bone", func() {
210+
staticBone = loadBone(staticRoutes)
211+
})
208212
calcMem("Denco", func() {
209213
staticDenco = loadDenco(staticRoutes)
210214
})
@@ -264,6 +268,9 @@ func BenchmarkHttpServeMux_StaticAll(b *testing.B) {
264268
func BenchmarkBeego_StaticAll(b *testing.B) {
265269
benchRoutes(b, staticBeego, staticRoutes)
266270
}
271+
func BenchmarkBone_StaticAll(b *testing.B) {
272+
benchRoutes(b, staticBone, staticRoutes)
273+
}
267274
func BenchmarkDenco_StaticAll(b *testing.B) {
268275
benchRoutes(b, staticDenco, staticRoutes)
269276
}

0 commit comments

Comments
 (0)