julienschmidt / go-http-routing-benchmark Goto Github PK
View Code? Open in Web Editor NEWGo HTTP request router and web framework benchmark
License: BSD 3-Clause "New" or "Revised" License
Go HTTP request router and web framework benchmark
License: BSD 3-Clause "New" or "Revised" License
Somehow the bear test gets a nil request passed. When I dump the requests the last several tests are the following:
&{POST /1/events/:eventName HTTP/1.1 1 1 map[] <nil> 0 [] false map[] map[] <nil> map[] /1/events/:eventName <nil> <nil>}
&{POST /1/push HTTP/1.1 1 1 map[] <nil> 0 [] false map[] map[] <nil> map[] /1/push <nil> <nil>}
&{POST /1/installations HTTP/1.1 1 1 map[] <nil> 0 [] false map[] map[] <nil> map[] /1/installations <nil> <nil>}
&{GET /1/installations/:objectId HTTP/1.1 1 1 map[] <nil> 0 [] false map[] map[] <nil> map[] /1/installations/:objectId <nil> <nil>}
&{PUT /1/installations/:objectId HTTP/1.1 1 1 map[] <nil> 0 [] false map[] map[] <nil> map[] /1/installations/:objectId <nil> <nil>}
&{GET /1/installations HTTP/1.1 1 1 map[] <nil> 0 [] false map[] map[] <nil> map[] /1/installations <nil> <nil>}
&{DELETE /1/installations/:objectId HTTP/1.1 1 1 map[] <nil> 0 [] false map[] map[] <nil> map[] /1/installations/:objectId <nil> <nil>}
&{POST /1/functions HTTP/1.1 1 1 map[] <nil> 0 [] false map[] map[] <nil> map[] /1/functions <nil> <nil>}
<nil>
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x489482]
goroutine 8 [running]:
testing.tRunner.func1(0xc82008a000)
/usr/local/go/src/testing/testing.go:450 +0x171
github.com/julienschmidt/go-http-routing-benchmark.bearHandlerTest(0x0, 0x0, 0x0, 0xc8202cb4c0)
/data01/dev/src/github.com/julienschmidt/go-http-routing-benchmark/routers.go:144 +0x1a2
github.com/ursiform/bear.(*Context).Next(0xc8202cb4c0)
/data01/dev/src/github.com/ursiform/bear/context.go:48 +0x11e
github.com/ursiform/bear.(*Mux).ServeHTTP(0xc8202b64e0, 0x7fb2acef7e08, 0xc8202cc420, 0xc82010a380)
/data01/dev/src/github.com/ursiform/bear/mux.go:138 +0x19d
github.com/julienschmidt/go-http-routing-benchmark.TestRouters(0xc82008a000)
/data01/dev/src/github.com/julienschmidt/go-http-routing-benchmark/routers_test.go:73 +0x52a
testing.tRunner(0xc82008a000, 0x10f3620)
/usr/local/go/src/testing/testing.go:456 +0x98
created by testing.RunTests
/usr/local/go/src/testing/testing.go:561 +0x86d
goroutine 1 [chan receive]:
testing.RunTests(0xe47108, 0x10f3620, 0x1, 0x1, 0x42ca01)
/usr/local/go/src/testing/testing.go:562 +0x8ad
testing.(*M).Run(0xc820167ee8, 0x0)
/usr/local/go/src/testing/testing.go:494 +0x70
main.main()
github.com/julienschmidt/go-http-routing-benchmark/_test/_testmain.go:888 +0x116
goroutine 17 [syscall, locked to thread]:
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:1696 +0x1
goroutine 5 [syscall]:
os/signal.loop()
/usr/local/go/src/os/signal/signal_unix.go:22 +0x18
created by os/signal.init.1
/usr/local/go/src/os/signal/signal_unix.go:28 +0x37
exit status 2
FAIL github.com/julienschmidt/go-http-routing-benchmark 0.044s
The line beego.RunMode = "prod"
has been changed to beego.BConfig.RunMode = beego.PROD
. This causes the tests to fail and the benchmark to not run.
After run a go get -u -v
I got:
➜ go get -u -v
github.com/julienschmidt/go-http-routing-benchmark (download)
github.com/ant0ine/go-json-rest (download)
github.com/astaxie/beego (download)
github.com/bmizerany/pat (download)
github.com/dimfeld/httptreemux (download)
github.com/emicklei/go-restful (download)
github.com/gin-gonic/gin (download)
github.com/gin-contrib/sse (download)
github.com/golang/protobuf (download)
github.com/ugorji/go (download)
Fetching https://gopkg.in/go-playground/validator.v8?go-get=1
Parsing meta tags from https://gopkg.in/go-playground/validator.v8?go-get=1 (status code 200)
get "gopkg.in/go-playground/validator.v8": found meta tag get.metaImport{Prefix:"gopkg.in/go-playground/validator.v8", VCS:"git", RepoRoot:"https://gopkg.in/go-playground/validator.v8"} at https://gopkg.in/go-playground/validator.v8?go-get=1
gopkg.in/go-playground/validator.v8 (download)
Fetching https://gopkg.in/yaml.v2?go-get=1
Parsing meta tags from https://gopkg.in/yaml.v2?go-get=1 (status code 200)
get "gopkg.in/yaml.v2": found meta tag get.metaImport{Prefix:"gopkg.in/yaml.v2", VCS:"git", RepoRoot:"https://gopkg.in/yaml.v2"} at https://gopkg.in/yaml.v2?go-get=1
gopkg.in/yaml.v2 (download)
github.com/mattn/go-isatty (download)
github.com/go-macaron/macaron (download)
github.com/Unknwon/com (download)
github.com/go-macaron/inject (download)
Fetching https://golang.org/x/crypto/pbkdf2?go-get=1
Parsing meta tags from https://golang.org/x/crypto/pbkdf2?go-get=1 (status code 200)
get "golang.org/x/crypto/pbkdf2": found meta tag get.metaImport{Prefix:"golang.org/x/crypto", VCS:"git", RepoRoot:"https://go.googlesource.com/crypto"} at https://golang.org/x/crypto/pbkdf2?go-get=1
get "golang.org/x/crypto/pbkdf2": verifying non-authoritative meta tag
Fetching https://golang.org/x/crypto?go-get=1
Parsing meta tags from https://golang.org/x/crypto?go-get=1 (status code 200)
golang.org/x/crypto (download)
Fetching https://gopkg.in/ini.v1?go-get=1
Parsing meta tags from https://gopkg.in/ini.v1?go-get=1 (status code 200)
get "gopkg.in/ini.v1": found meta tag get.metaImport{Prefix:"gopkg.in/ini.v1", VCS:"git", RepoRoot:"https://gopkg.in/ini.v1"} at https://gopkg.in/ini.v1?go-get=1
gopkg.in/ini.v1 (download)
github.com/go-martini/martini (download)
github.com/codegangsta/inject (download)
github.com/go-playground/lars (download)
github.com/go-playground/form (download)
github.com/gorilla/websocket (download)
github.com/go-zoo/bone (download)
github.com/gocraft/web (download)
github.com/gorilla/mux (download)
github.com/julienschmidt/httprouter (download)
github.com/labstack/echo (download)
github.com/labstack/gommon (download)
github.com/mattn/go-colorable (download)
github.com/valyala/fasttemplate (download)
Fetching https://golang.org/x/crypto/acme/autocert?go-get=1
Parsing meta tags from https://golang.org/x/crypto/acme/autocert?go-get=1 (status code 200)
get "golang.org/x/crypto/acme/autocert": found meta tag get.metaImport{Prefix:"golang.org/x/crypto", VCS:"git", RepoRoot:"https://go.googlesource.com/crypto"} at https://golang.org/x/crypto/acme/autocert?go-get=1
get "golang.org/x/crypto/acme/autocert": verifying non-authoritative meta tag
Fetching https://golang.org/x/crypto/acme?go-get=1
Parsing meta tags from https://golang.org/x/crypto/acme?go-get=1 (status code 200)
get "golang.org/x/crypto/acme": found meta tag get.metaImport{Prefix:"golang.org/x/crypto", VCS:"git", RepoRoot:"https://go.googlesource.com/crypto"} at https://golang.org/x/crypto/acme?go-get=1
get "golang.org/x/crypto/acme": verifying non-authoritative meta tag
github.com/lunny/log (download)
github.com/lunny/tango (download)
github.com/mailgun/route (download)
github.com/vulcand/predicate (download)
github.com/gravitational/trace (download)
github.com/jonboulle/clockwork (download)
github.com/sirupsen/logrus (download)
Fetching https://golang.org/x/crypto/ssh/terminal?go-get=1
Parsing meta tags from https://golang.org/x/crypto/ssh/terminal?go-get=1 (status code 200)
get "golang.org/x/crypto/ssh/terminal": found meta tag get.metaImport{Prefix:"golang.org/x/crypto", VCS:"git", RepoRoot:"https://go.googlesource.com/crypto"} at https://golang.org/x/crypto/ssh/terminal?go-get=1
get "golang.org/x/crypto/ssh/terminal": verifying non-authoritative meta tag
Fetching https://golang.org/x/sys/unix?go-get=1
Parsing meta tags from https://golang.org/x/sys/unix?go-get=1 (status code 200)
get "golang.org/x/sys/unix": found meta tag get.metaImport{Prefix:"golang.org/x/sys", VCS:"git", RepoRoot:"https://go.googlesource.com/sys"} at https://golang.org/x/sys/unix?go-get=1
get "golang.org/x/sys/unix": verifying non-authoritative meta tag
Fetching https://golang.org/x/sys?go-get=1
Parsing meta tags from https://golang.org/x/sys?go-get=1 (status code 200)
golang.org/x/sys (download)
Fetching https://golang.org/x/net/context?go-get=1
Parsing meta tags from https://golang.org/x/net/context?go-get=1 (status code 200)
get "golang.org/x/net/context": found meta tag get.metaImport{Prefix:"golang.org/x/net", VCS:"git", RepoRoot:"https://go.googlesource.com/net"} at https://golang.org/x/net/context?go-get=1
get "golang.org/x/net/context": verifying non-authoritative meta tag
Fetching https://golang.org/x/net?go-get=1
Parsing meta tags from https://golang.org/x/net?go-get=1 (status code 200)
golang.org/x/net (download)
github.com/mikespook/possum (download)
Fetching https://gopkg.in/fsnotify.v1?go-get=1
Parsing meta tags from https://gopkg.in/fsnotify.v1?go-get=1 (status code 200)
get "gopkg.in/fsnotify.v1": found meta tag get.metaImport{Prefix:"gopkg.in/fsnotify.v1", VCS:"git", RepoRoot:"https://gopkg.in/fsnotify.v1"} at https://gopkg.in/fsnotify.v1?go-get=1
gopkg.in/fsnotify.v1 (download)
Fetching https://golang.org/x/net/websocket?go-get=1
Parsing meta tags from https://golang.org/x/net/websocket?go-get=1 (status code 200)
get "golang.org/x/net/websocket": found meta tag get.metaImport{Prefix:"golang.org/x/net", VCS:"git", RepoRoot:"https://go.googlesource.com/net"} at https://golang.org/x/net/websocket?go-get=1
get "golang.org/x/net/websocket": verifying non-authoritative meta tag
github.com/naoina/denco (download)
github.com/naoina/kocha-urlrouter (download)
github.com/pilu/traffic (download)
github.com/pilu/config (download)
github.com/plimble/ace (download)
github.com/plimble/sessions (download)
github.com/oxtoacart/bpool (download)
github.com/satori/go.uuid (download)
github.com/tinylib/msgp (download)
github.com/philhofer/fwd (download)
github.com/plimble/utils (download)
github.com/rcrowley/go-tigertonic (download)
github.com/rcrowley/go-metrics (download)
github.com/revel/revel (download)
github.com/revel/config (download)
github.com/revel/log15 (download)
github.com/inconshreveable/log15 (download)
Fetching https://gopkg.in/stack.v0?go-get=1
Parsing meta tags from https://gopkg.in/stack.v0?go-get=1 (status code 200)
get "gopkg.in/stack.v0": found meta tag get.metaImport{Prefix:"gopkg.in/stack.v0", VCS:"git", RepoRoot:"https://gopkg.in/stack.v0"} at https://gopkg.in/stack.v0?go-get=1
gopkg.in/stack.v0 (download)
github.com/revel/pathtree (download)
Fetching https://gopkg.in/natefinch/lumberjack.v2?go-get=1
Parsing meta tags from https://gopkg.in/natefinch/lumberjack.v2?go-get=1 (status code 200)
get "gopkg.in/natefinch/lumberjack.v2": found meta tag get.metaImport{Prefix:"gopkg.in/natefinch/lumberjack.v2", VCS:"git", RepoRoot:"https://gopkg.in/natefinch/lumberjack.v2"} at https://gopkg.in/natefinch/lumberjack.v2?go-get=1
gopkg.in/natefinch/lumberjack.v2 (download)
github.com/xeonx/timeago (download)
Fetching https://gopkg.in/fsnotify/fsnotify.v1?go-get=1
Parsing meta tags from https://gopkg.in/fsnotify/fsnotify.v1?go-get=1 (status code 200)
get "gopkg.in/fsnotify/fsnotify.v1": found meta tag get.metaImport{Prefix:"gopkg.in/fsnotify/fsnotify.v1", VCS:"git", RepoRoot:"https://gopkg.in/fsnotify/fsnotify.v1"} at https://gopkg.in/fsnotify/fsnotify.v1?go-get=1
gopkg.in/fsnotify/fsnotify.v1 (download)
github.com/robfig/pathtree (download)
github.com/typepress/rivet (download)
github.com/ursiform/bear (download)
github.com/vanng822/r2router (download)
github.com/zenazn/goji (download)
Fetching https://goji.io?go-get=1
Parsing meta tags from https://goji.io?go-get=1 (status code 200)
get "goji.io": found meta tag get.metaImport{Prefix:"goji.io", VCS:"git", RepoRoot:"https://github.com/goji/goji"} at https://goji.io?go-get=1
goji.io (download)
Fetching https://goji.io/internal?go-get=1
Parsing meta tags from https://goji.io/internal?go-get=1 (status code 200)
get "goji.io/internal": found meta tag get.metaImport{Prefix:"goji.io", VCS:"git", RepoRoot:"https://github.com/goji/goji"} at https://goji.io/internal?go-get=1
get "goji.io/internal": verifying non-authoritative meta tag
Fetching https://goji.io?go-get=1
Parsing meta tags from https://goji.io?go-get=1 (status code 200)
Fetching https://goji.io/pat?go-get=1
Parsing meta tags from https://goji.io/pat?go-get=1 (status code 200)
get "goji.io/pat": found meta tag get.metaImport{Prefix:"goji.io", VCS:"git", RepoRoot:"https://github.com/goji/goji"} at https://goji.io/pat?go-get=1
get "goji.io/pat": verifying non-authoritative meta tag
Fetching https://goji.io/pattern?go-get=1
Parsing meta tags from https://goji.io/pattern?go-get=1 (status code 200)
get "goji.io/pattern": found meta tag get.metaImport{Prefix:"goji.io", VCS:"git", RepoRoot:"https://github.com/goji/goji"} at https://goji.io/pattern?go-get=1
get "goji.io/pattern": verifying non-authoritative meta tag
github.com/julienschmidt/go-http-routing-benchmark
# github.com/julienschmidt/go-http-routing-benchmark
./routers.go:1151:33: rc.Controller.Request.RequestURI undefined (type *revel.Request has no field or method RequestURI)
./routers.go:1167:27: cannot use r (type *http.Request) as type revel.ServerRequest in argument to revel.NewRequest:
*http.Request does not implement revel.ServerRequest (missing Get method)
./routers.go:1168:28: cannot use w (type http.ResponseWriter) as type revel.ServerResponse in argument to revel.NewResponse:
http.ResponseWriter does not implement revel.ServerResponse (missing Get method)
./routers.go:1169:30: too many arguments in call to revel.NewController
have (*revel.Request, *revel.Response)
want (revel.ServerContext)
./routers.go:1171:6: req.Websocket undefined (type *revel.Request has no field or method Websocket, but does have WebSocket)
./routers.go:1179:23: invalid type assertion: resp.Out.(io.Closer) (non-interface type revel.OutResponse on left)
./routers.go:1218:33: not enough arguments in call to revel.NewRoute
have (string, string, string, string, string, number)
want (*revel.Module, string, string, string, string, string, int)
./routers.go:1223:14: cannot use "github.com/robfig/pathtree".New() (type *"github.com/robfig/pathtree".Node) as type *"github.com/revel/pathtree".Node in assignment
./routers.go:1244:25: not enough arguments in call to revel.NewRoute
have (string, string, string, string, string, number)
want (*revel.Module, string, string, string, string, string, int)
Hi, Macaron seems to be a popular framework,
perhaps you could add that to this great resource?
Thanks!
I think chi is lightweight router too. Would you consider it?
The repos: https://github.com/pressly/chi
Will u be adding echo to the benchmarks?
Hi. Please include the native Go http.HandleFunc in your benchmarks. I know it lacks a lot of features but it would be cool to see how httprouter compares against it. Thank you
https://github.com/cnotch/apirouter
It provides a lightning fast RESTful api router.
I've implemented the benchmark myself in https://github.com/cnotch/go-http-routing-benchmark.
Running go test -bench=. -timeout=20m
but failed:
--- FAIL: TestRouters (2.72s)
routers_test.go:78: Zeus in API Static: 301 - <a href="/articles">Moved Permanently</a>.
; expected GET /articles/
routers_test.go:78: Zeus in API Static: 301 - <a href="/articles/wiki">Moved Permanently</a>.
; expected GET /articles/wiki/
routers_test.go:78: Zeus in API Static: 301 - <a href="/codewalk">Moved Permanently</a>.
; expected GET /codewalk/
routers_test.go:78: Zeus in API Static: 301 - <a href="/devel">Moved Permanently</a>.
; expected GET /devel/
routers_test.go:78: Zeus in API Static: 301 - <a href="/gopher">Moved Permanently</a>.
; expected GET /gopher/
routers_test.go:78: Zeus in API Static: 301 - <a href="/gopher/pencil">Moved Permanently</a>.
; expected GET /gopher/pencil/
routers_test.go:78: Zeus in API Static: 301 - <a href="/play">Moved Permanently</a>.
; expected GET /play/
routers_test.go:78: Zeus in API Static: 301 - <a href="/progs">Moved Permanently</a>.
; expected GET /progs/
I'd like to make a PR, but I am not familiar with Zeus.
When I did go get
today the build failed because the Rivet api changed. Commented it out and ran in to issues from previous issue with a panic that a nil pointer was dereferenced.
I'm trying to run benchmarks from the last commit (2b13695).
Using Go 1.8 and all fresh dependencies, I'm seeing lots of build problems.
Ideally, a process would regularly update all dependencies to ensure that everything still works.
Barring that, capturing the current dependencies in vendor would allow me to recreate your exact setup.
Regular updates that are captured in vendor would be sweet.
Hi,
I find the benchmark for these routing codes is very old, the README.md file is commited four years ago
Is there new benchmark for these framework? I believe these framework have done a lot of work to improve their performance
Here's a problem I've now run into consistently running the benchmarks using go 1.4.2 and 1.5 (master):
The SIGQUIT occurs in different places each time, although the stack dumps often mention Beego.
Significantly, these problems were only seen using virtualized Linux instances (VMWare, VirtualBox). Have you seen similar stack dumps running the full suite?
Hey there,
Could you add the Kami web framework to the benchmark list? Thanks!
I have idea to make a router based on hashtable. There is only one problem, how to distinguish parameters and 'static' elements in real paths (eg. in /github.com/julienschmidt/go-http-routing-benchmark/issues/new params are emphasized, rest is static).
There is simple solution, prefix each param with colon in real URL ( /github.com/:julienschmidt/:go-http-routing-benchmark/issues/new ) - it is only a little bit more verbose, but has nice computional properties :)
Do you (or any competiotor?) consider using this as a cheat in competition with other routing implementations?
Could you please add https://gin-gonic.github.io/gin/ ?
Thanks in advance
Should we add Bone : https://github.com/go-zoo/bone as one of the router for benchmark?
Hugo is a well known framework, could you please add support for it?
https://github.com/spf13/hugo
The web router https://github.com/gowww/router claims to be lightning fast. Adding it to your benchmark might be enlight(n)ing.
Please include the https://github.com/buaazp/fasthttprouter which based on https://github.com/valyala/fasthttp
I followed the instructions to run this test myself and got the following. I'm running on ubuntu 18.04 and go 1.13.5
go get github.com/julienschmidt/go-http-routing-benchmark
# github.com/julienschmidt/go-http-routing-benchmark
src/github.com/julienschmidt/go-http-routing-benchmark/routers.go:1242:23: undefined: possum.Context
src/github.com/julienschmidt/go-http-routing-benchmark/routers.go:1246:28: undefined: possum.Context
src/github.com/julienschmidt/go-http-routing-benchmark/routers.go:1251:27: undefined: possum.Context
src/github.com/julienschmidt/go-http-routing-benchmark/routers.go:1262:12: undefined: possum.NewServerMux
src/github.com/julienschmidt/go-http-routing-benchmark/routers.go:1270:12: undefined: possum.NewServerMux
cd src/github.com/julienschmidt/go-http-routing-benchmark/
go get -u
go: downloading github.com/astaxie/beego v1.12.0
go: downloading github.com/go-chi/chi v4.0.2+incompatible
go: downloading github.com/naoina/denco v0.0.0-20180930074809-8475105a6b4c
go: downloading github.com/zenazn/goji v0.9.0
go: downloading github.com/mailgun/route v0.0.0-20181101151700-58b44163b968
go: downloading github.com/gin-gonic/gin v1.5.0
go: downloading github.com/labstack/echo/v4 v4.1.11
go: downloading github.com/naoina/kocha-urlrouter v0.0.0-20140609163054-ad3a6f079210
go: downloading gopkg.in/macaron.v1 v1.3.4
go: downloading github.com/plimble/ace v0.0.0-20180623113504-ba79f505f416
go: extracting github.com/go-chi/chi v4.0.2+incompatible
go: downloading github.com/lunny/tango v0.5.6
go: extracting github.com/zenazn/goji v0.9.0
go: downloading github.com/rcrowley/go-tigertonic v0.0.0-20170420123839-fe6b9f080eb7
go: extracting github.com/labstack/echo/v4 v4.1.11
go: downloading golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad
go: extracting github.com/plimble/ace v0.0.0-20180623113504-ba79f505f416
go: extracting github.com/naoina/kocha-urlrouter v0.0.0-20140609163054-ad3a6f079210
go: downloading github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de
go: downloading github.com/mikespook/possum v0.0.0-20170224044927-56d7ebb6470b
go: extracting gopkg.in/macaron.v1 v1.3.4
go: extracting github.com/gin-gonic/gin v1.5.0
go: downloading github.com/labstack/gommon v0.3.0
go: extracting github.com/naoina/denco v0.0.0-20180930074809-8475105a6b4c
go: downloading github.com/dimfeld/httptreemux v5.0.1+incompatible
go: extracting github.com/mailgun/route v0.0.0-20181101151700-58b44163b968
go: downloading github.com/go-zoo/bone v1.3.0
go: extracting github.com/astaxie/beego v1.12.0
go: extracting github.com/lunny/tango v0.5.6
go: extracting github.com/rcrowley/go-tigertonic v0.0.0-20170420123839-fe6b9f080eb7
go: extracting github.com/lunny/log v0.0.0-20160921050905-7887c61bf0de
go: downloading github.com/ant0ine/go-json-rest v3.3.2+incompatible
go: downloading github.com/ursiform/bear v1.0.1
go: downloading goji.io v2.0.2+incompatible
go: extracting github.com/labstack/gommon v0.3.0
go: downloading github.com/vulcand/predicate v1.1.0
go: extracting github.com/dimfeld/httptreemux v5.0.1+incompatible
go: extracting golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad
go: extracting github.com/ursiform/bear v1.0.1
go: extracting github.com/mikespook/possum v0.0.0-20170224044927-56d7ebb6470b
go: extracting github.com/ant0ine/go-json-rest v3.3.2+incompatible
go: extracting goji.io v2.0.2+incompatible
go: extracting github.com/go-zoo/bone v1.3.0
go: downloading github.com/plimble/utils v0.0.0-20150615054616-fe08d46675cd
go: downloading github.com/cloudykit/router v0.0.0-20170501012743-15c4ed71df81
go: downloading github.com/vanng822/r2router v0.0.0-20150523112421-1023140a4f30
go: downloading gopkg.in/ini.v1 v1.48.0
go: downloading github.com/valyala/fasttemplate v1.0.1
go: downloading github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191
go: downloading gitea.com/lunny/log v0.0.0-20190322053110-01b5df579c4e
go: downloading github.com/julienschmidt/httprouter v1.3.0
go: downloading github.com/plimble/sessions v0.0.0-20180326075456-7047d39da9ad
go: extracting github.com/valyala/fasttemplate v1.0.1
go: downloading github.com/gowww/router v0.0.0-20180327195201-5f9c626ef619
go: extracting gopkg.in/ini.v1 v1.48.0
go: extracting github.com/vanng822/r2router v0.0.0-20150523112421-1023140a4f30
go: extracting github.com/plimble/utils v0.0.0-20150615054616-fe08d46675cd
go: extracting github.com/cloudykit/router v0.0.0-20170501012743-15c4ed71df81
go: extracting github.com/go-macaron/inject v0.0.0-20160627170012-d8a0b8677191
go: downloading github.com/mattn/go-colorable v0.1.2
go: downloading github.com/mattn/go-isatty v0.0.9
go: downloading github.com/aerogo/aero v1.3.42
go: downloading golang.org/x/net v0.0.0-20190926025831-c00fd9afed17
go: extracting github.com/julienschmidt/httprouter v1.3.0
go: extracting gitea.com/lunny/log v0.0.0-20190322053110-01b5df579c4e
go: extracting github.com/vulcand/predicate v1.1.0
go: extracting github.com/plimble/sessions v0.0.0-20180326075456-7047d39da9ad
go: downloading github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40
go: downloading github.com/gravitational/trace v0.0.0-20190726142706-a535a178675f
go: downloading github.com/gin-contrib/sse v0.1.0
go: downloading github.com/emicklei/go-restful v2.10.0+incompatible
go: downloading github.com/tinylib/msgp v1.1.0
go: extracting github.com/gowww/router v0.0.0-20180327195201-5f9c626ef619
go: downloading github.com/pilu/traffic v0.5.3
go: extracting github.com/mattn/go-colorable v0.1.2
go: extracting github.com/mattn/go-isatty v0.0.9
go: downloading github.com/typepress/rivet v1.1.1-0.20151208095308-d62b4fcaf6b9
go: downloading github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b
go: extracting github.com/aerogo/aero v1.3.42
go: downloading github.com/aerogo/http v1.1.1
go: extracting github.com/pilu/traffic v0.5.3
go: extracting github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b
go: extracting github.com/emicklei/go-restful v2.10.0+incompatible
go: extracting github.com/gravitational/trace v0.0.0-20190726142706-a535a178675f
go: extracting github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40
go: extracting github.com/gin-contrib/sse v0.1.0
go: extracting github.com/typepress/rivet v1.1.1-0.20151208095308-d62b4fcaf6b9
go: extracting github.com/tinylib/msgp v1.1.0
go: downloading github.com/valyala/bytebufferpool v1.0.0
go: downloading github.com/golang/protobuf v1.3.2
go: downloading github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c
go: downloading github.com/json-iterator/go v1.1.7
go: downloading gopkg.in/go-playground/validator.v9 v9.29.1
go: downloading github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563
go: downloading github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab
go: extracting golang.org/x/net v0.0.0-20190926025831-c00fd9afed17
go: extracting github.com/aerogo/http v1.1.1
go: downloading github.com/gocraft/web v0.0.0-20190207150652-9707327fb69b
go: downloading golang.org/x/sys v0.0.0-20191025090151-53bf42e6b339
go: downloading github.com/ugorji/go v1.1.7
go: extracting github.com/valyala/bytebufferpool v1.0.0
go: downloading github.com/sirupsen/logrus v1.4.2
go: extracting github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563
go: extracting gopkg.in/go-playground/validator.v9 v9.29.1
go: extracting github.com/gocraft/web v0.0.0-20190207150652-9707327fb69b
go: extracting github.com/json-iterator/go v1.1.7
go: extracting github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c
go: downloading github.com/aerogo/linter-performance v1.0.6
go: extracting github.com/golang/protobuf v1.3.2
go: extracting github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab
go: extracting github.com/ugorji/go v1.1.7
go: downloading github.com/ugorji/go/codec v1.1.7
go: downloading github.com/aerogo/session v0.1.8
go: downloading github.com/aerogo/session-store-memory v0.1.9
go: downloading github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742
go: downloading github.com/akyoto/hash v0.4.8
go: extracting github.com/sirupsen/logrus v1.4.2
go: downloading github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421
go: downloading github.com/jonboulle/clockwork v0.1.0
go: extracting github.com/aerogo/session v0.1.8
go: extracting github.com/aerogo/linter-performance v1.0.6
go: downloading github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0
go: downloading github.com/konsorten/go-windows-terminal-sequences v1.0.2
go: extracting github.com/ugorji/go/codec v1.1.7
go: extracting github.com/jonboulle/clockwork v0.1.0
go: extracting github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421
go: extracting github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742
go: extracting github.com/akyoto/hash v0.4.8
go: extracting github.com/aerogo/session-store-memory v0.1.9
go: downloading github.com/leodido/go-urn v1.1.0
go: downloading github.com/akyoto/stringutils v0.3.0
go: downloading github.com/akyoto/color v1.8.11
go: downloading github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644
go: downloading gopkg.in/fsnotify.v1 v1.4.7
go: extracting golang.org/x/sys v0.0.0-20191025090151-53bf42e6b339
go: downloading github.com/akyoto/uuid v1.1.3
go: downloading github.com/aerogo/csp v0.1.10
go: downloading github.com/philhofer/fwd v1.0.0
go: extracting github.com/konsorten/go-windows-terminal-sequences v1.0.2
go: extracting github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0
go: downloading github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a
go: extracting github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644
go: extracting github.com/akyoto/stringutils v0.3.0
go: extracting github.com/leodido/go-urn v1.1.0
go: downloading github.com/go-playground/universal-translator v0.16.0
go: downloading github.com/unknwon/com v1.0.1
go: downloading github.com/go-playground/lars v4.0.1+incompatible
go: extracting github.com/akyoto/uuid v1.1.3
go: extracting gopkg.in/fsnotify.v1 v1.4.7
go: extracting github.com/akyoto/color v1.8.11
go: downloading github.com/akyoto/colorable v0.1.7
go: downloading github.com/akyoto/tty v0.1.3
go: downloading golang.org/x/text v0.3.2
go: extracting github.com/philhofer/fwd v1.0.0
go: downloading github.com/zeebo/xxh3 v0.0.0-20191021174148-b56a7dc3d80c
go: extracting github.com/pilu/config v0.0.0-20131214182432-3eb99e6c0b9a
go: extracting github.com/aerogo/csp v0.1.10
go: extracting github.com/go-playground/universal-translator v0.16.0
go: downloading github.com/go-playground/locales v0.12.1
go: extracting github.com/akyoto/colorable v0.1.7
go: extracting github.com/unknwon/com v1.0.1
go: extracting github.com/zeebo/xxh3 v0.0.0-20191021174148-b56a7dc3d80c
go: extracting github.com/go-playground/locales v0.12.1
go: extracting github.com/akyoto/tty v0.1.3
go: extracting github.com/go-playground/lars v4.0.1+incompatible
go: downloading github.com/go-playground/form v3.1.4+incompatible
go: downloading github.com/gorilla/websocket v1.4.1
go: extracting github.com/gorilla/websocket v1.4.1
go: extracting github.com/go-playground/form v3.1.4+incompatible
go: extracting golang.org/x/text v0.3.2
go: finding github.com/leodido/go-urn v1.2.0
go: finding github.com/gravitational/trace latest
go: finding github.com/go-macaron/inject latest
go: finding github.com/go-martini/martini latest
go: finding github.com/pilu/config latest
go: finding github.com/shiena/ansicolor latest
go: finding github.com/zeebo/xxh3 latest
go: finding github.com/go-chi/chi v4.0.2+incompatible
go: finding gopkg.in/go-playground/validator.v9 v9.31.0
go: finding github.com/satori/go.uuid v1.2.0
go: finding github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b
go: finding github.com/go-playground/form v3.1.4+incompatible
go: finding github.com/codegangsta/inject latest
go: finding github.com/gocraft/web latest
go: finding github.com/labstack/echo/v4 v4.1.13
go: finding github.com/valyala/fasttemplate v1.1.0
go: finding golang.org/x/net latest
go: finding github.com/lunny/tango v0.5.6
go: finding github.com/tinylib/msgp v1.1.1
go: finding golang.org/x/text v0.3.2
go: finding github.com/emicklei/go-restful v2.11.1+incompatible
go: finding github.com/go-zoo/bone v1.3.0
go: finding github.com/labstack/gommon v0.3.0
go: finding github.com/gorilla/websocket v1.4.1
go: finding gopkg.in/macaron.v1 v1.3.4
go: finding github.com/lunny/log latest
go: finding github.com/ugorji/go/codec v1.1.7
go: finding github.com/philhofer/fwd v1.0.0
go: finding golang.org/x/sys latest
go: finding github.com/vulcand/predicate v1.1.0
go: finding github.com/unknwon/com v1.0.1
go: finding github.com/aerogo/aero v1.3.52
go: finding github.com/golang/protobuf v1.3.2
go: finding github.com/gin-contrib/sse v0.1.0
go: finding golang.org/x/crypto latest
go: finding github.com/konsorten/go-windows-terminal-sequences v1.0.2
go: finding github.com/ursiform/bear v1.0.1
go: finding github.com/pilu/traffic v0.5.3
go: finding github.com/aerogo/session v0.1.9
go: finding github.com/typepress/rivet v1.1.0
go: finding gopkg.in/ini.v1 v1.51.1
go: finding github.com/typepress/rivet v1.1.1-0.20151208095308-d62b4fcaf6b9
go: finding github.com/julienschmidt/httprouter v1.3.0
go: finding github.com/oxtoacart/bpool latest
go: finding github.com/mikespook/possum latest
go: finding github.com/gowww/router latest
go: finding github.com/valyala/bytebufferpool v1.0.0
go: finding github.com/ant0ine/go-json-rest v3.3.2+incompatible
go: finding github.com/akyoto/tty v0.1.3
go: finding github.com/go-playground/lars v4.0.1+incompatible
go: finding github.com/bmizerany/pat latest
go: finding github.com/plimble/ace latest
go: finding github.com/naoina/denco latest
go: finding github.com/aerogo/session-store-memory v0.1.9
go: finding github.com/akyoto/stringutils v0.3.1
go: finding goji.io v2.0.2+incompatible
go: finding github.com/akyoto/hash v0.4.9
go: finding github.com/akyoto/uuid v1.1.3
go: finding github.com/astaxie/beego v1.12.0
go: finding github.com/vanng822/r2router latest
go: finding github.com/sirupsen/logrus v1.4.2
go: finding github.com/dimfeld/httptreemux v5.0.1+incompatible
go: finding github.com/modern-go/reflect2 v1.0.1
go: finding github.com/mattn/go-colorable v0.1.4
go: finding github.com/zenazn/goji v0.9.0
go: finding github.com/rcrowley/go-metrics latest
go: finding github.com/plimble/sessions latest
go: finding gitea.com/lunny/log latest
go: finding github.com/aerogo/csp v0.1.10
go: finding github.com/aerogo/http v1.1.3
go: finding github.com/akyoto/color v1.8.11
go: finding github.com/gin-gonic/gin v1.5.0
go: finding github.com/plimble/utils latest
go: finding github.com/naoina/kocha-urlrouter latest
go: finding github.com/mattn/go-isatty v0.0.11
go: finding github.com/akyoto/colorable v0.1.7
go: finding github.com/mailgun/route latest
go: finding github.com/aerogo/linter-performance v1.0.7
go: finding github.com/go-playground/universal-translator v0.17.0
go: finding github.com/json-iterator/go v1.1.9
go: finding github.com/go-playground/locales v0.13.0
go: finding github.com/modern-go/concurrent latest
go: finding github.com/rcrowley/go-tigertonic latest
go: finding github.com/cloudykit/router latest
go: finding github.com/jonboulle/clockwork v0.1.0
go: downloading github.com/aerogo/aero v1.3.52
go: downloading github.com/mikespook/possum v0.0.0-20191211205952-9816518f75d5
go: downloading github.com/labstack/echo v3.3.10+incompatible
go: downloading golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876
go: downloading github.com/mattn/go-isatty v0.0.11
go: downloading github.com/emicklei/go-restful v2.11.1+incompatible
go: downloading github.com/json-iterator/go v1.1.9
go: downloading github.com/mailgun/route v0.0.0-20191025171320-daa4df6c711a
go: extracting github.com/mattn/go-isatty v0.0.11
go: downloading golang.org/x/sys v0.0.0-20200102141924-c96a22e43c9c
go: extracting github.com/aerogo/aero v1.3.52
go: downloading github.com/aerogo/linter-performance v1.0.7
go: extracting github.com/json-iterator/go v1.1.9
go: downloading github.com/aerogo/http v1.1.3
go: extracting github.com/emicklei/go-restful v2.11.1+incompatible
go: extracting github.com/mailgun/route v0.0.0-20191025171320-daa4df6c711a
go: extracting github.com/mikespook/possum v0.0.0-20191211205952-9816518f75d5
go: downloading github.com/aerogo/session v0.1.9
go: downloading gopkg.in/go-playground/validator.v9 v9.31.0
go: extracting github.com/aerogo/linter-performance v1.0.7
go: extracting github.com/labstack/echo v3.3.10+incompatible
go: extracting golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876
go: downloading github.com/gravitational/trace v0.0.0-20191125212024-42a8fffe760d
go: downloading github.com/labstack/echo/v4 v4.1.13
go: downloading github.com/akyoto/stringutils v0.3.1
go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: downloading github.com/modern-go/reflect2 v1.0.1
go: extracting github.com/akyoto/stringutils v0.3.1
go: extracting github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: downloading gopkg.in/ini.v1 v1.51.1
go: downloading github.com/tinylib/msgp v1.1.1
go: extracting github.com/modern-go/reflect2 v1.0.1
go: extracting golang.org/x/sys v0.0.0-20200102141924-c96a22e43c9c
go: extracting github.com/labstack/echo/v4 v4.1.13
go: extracting github.com/gravitational/trace v0.0.0-20191125212024-42a8fffe760d
go: extracting github.com/aerogo/session v0.1.9
go: extracting gopkg.in/go-playground/validator.v9 v9.31.0
go: extracting github.com/aerogo/http v1.1.3
go: downloading github.com/akyoto/hash v0.4.9
go: downloading github.com/go-playground/universal-translator v0.17.0
go: downloading github.com/leodido/go-urn v1.2.0
go: downloading github.com/valyala/fasttemplate v1.1.0
go: downloading github.com/mattn/go-colorable v0.1.4
go: extracting gopkg.in/ini.v1 v1.51.1
go: extracting github.com/tinylib/msgp v1.1.1
go: extracting github.com/mattn/go-colorable v0.1.4
go: extracting github.com/valyala/fasttemplate v1.1.0
go: extracting github.com/go-playground/universal-translator v0.17.0
go: extracting github.com/akyoto/hash v0.4.9
go: downloading github.com/zeebo/xxh3 v0.0.0-20191227220208-65f423c10688
go: downloading github.com/go-playground/locales v0.13.0
go: extracting github.com/leodido/go-urn v1.2.0
go: extracting github.com/zeebo/xxh3 v0.0.0-20191227220208-65f423c10688
go: extracting github.com/go-playground/locales v0.13.0
# github.com/julienschmidt/go-http-routing-benchmark
./routers.go:1242:23: undefined: possum.Context
./routers.go:1246:28: undefined: possum.Context
./routers.go:1251:27: undefined: possum.Context
./routers.go:1262:12: undefined: possum.NewServerMux
./routers.go:1270:12: undefined: possum.NewServerMux
go test -bench=.
# github.com/julienschmidt/go-http-routing-benchmark [github.com/julienschmidt/go-http-routing-benchmark.test]
./routers.go:1242:23: undefined: possum.Context
./routers.go:1246:28: undefined: possum.Context
./routers.go:1251:27: undefined: possum.Context
./routers.go:1262:12: undefined: possum.NewServerMux
./routers.go:1270:12: undefined: possum.NewServerMux
FAIL github.com/julienschmidt/go-http-routing-benchmark [build failed]
Gin is a web framework which features a Martini-like API with much better performance by using httprouter -- up to 40 times faster.
https://gin-gonic.github.io/gin/
Is it possible to include Gin into these tests? Thanks.
It's great that these benchmarks exist, but there should be a date associated with the running of the benchmark. It would be even better if there was also some process that ran once in a while to update these. It looks like the last run was more than a year old for some of the routers.
Thanks for the great work with httprouter!
Hey guys, could you please include https://github.com/gin-gonic/gin in the benchmark results ?
Negroni – https://github.com/codegangsta/negroni
I dont have the ability to perform a pull request right now but I think this line is wrong.
https://github.com/julienschmidt/go-http-routing-benchmark/blob/master/static_test.go#L291
It should be loadVulcan
and not loadTraffic
right?
Stop the broken dependencies by using go modules
github.com/julienschmidt/go-http-routing-benchmark
./routers.go:338: c.Response undefined (type *echo.Context is pointer to interface, not interface)
./routers.go:338: c.Param undefined (type *echo.Context is pointer to interface, not interface)
./routers.go:343: c.Response undefined (type *echo.Context is pointer to interface, not interface)
./routers.go:343: c.Request undefined (type *echo.Context is pointer to interface, not interface)
./routers.go:357: cannot use h (type interface {}) as type echo.HandlerFunc in argument to e.Get: need type assertion
./routers.go:359: cannot use h (type interface {}) as type echo.HandlerFunc in argument to e.Post: need type assertion
./routers.go:361: cannot use h (type interface {}) as type echo.HandlerFunc in argument to e.Put: need type assertion
./routers.go:363: cannot use h (type interface {}) as type echo.HandlerFunc in argument to e.Patch: need type assertion
./routers.go:365: cannot use h (type interface {}) as type echo.HandlerFunc in argument to e.Delete: need type assertion
./routers.go:370: cannot use e (type *echo.Echo) as type http.Handler in return argument:
*echo.Echo does not implement http.Handler (wrong type for ServeHTTP method)
have ServeHTTP(engine.Request, engine.Response)
want ServeHTTP(http.ResponseWriter, *http.Request)
./routers.go:370: too many errors
I could add myself but I please any of you do it ( with the same hardware you ran the other frameworks) that for objective reasons. The repo is http://github.com/kataras/iris I have temporary results until some of you do that I ask, thanks you again
Right before the words "Enough of the micro benchmark stuff ..." there is header "Parse.com" with link.
This link should be:
http://docs.parseplatform.org/rest/guide/
hi, @julienschmidt
I have test you code in my local. the bench is much better.
later I will send you a pull request. thanks!
and the follow is the result:
go test -bench=.
#GithubAPI Routes: 203
Beego: 179192 Bytes
Denco: 113976 Bytes
GocraftWeb: 97832 Bytes
Goji: 50920 Bytes
GoJsonRest: 142512 Bytes
GorillaMux: 724552 Bytes
HttpRouter: 44200 Bytes
HttpTreeMux: 81632 Bytes
Kocha: 790944 Bytes
Martini: 547632 Bytes
Pat: 16808 Bytes
TigerTonic: 97880 Bytes
Traffic: 496760 Bytes
#GPlusAPI Routes: 13
Beego: 9584 Bytes
Denco: 47744 Bytes
GocraftWeb: 12088 Bytes
Goji: 3456 Bytes
GoJsonRest: 11608 Bytes
GorillaMux: 34224 Bytes
HttpRouter: 3128 Bytes
HttpTreeMux: 7160 Bytes
Kocha: 129424 Bytes
Martini: 27408 Bytes
Pat: 1448 Bytes
TigerTonic: 9496 Bytes
Traffic: 23456 Bytes
#ParseAPI Routes: 26
Beego: 20264 Bytes
Denco: 48296 Bytes
GocraftWeb: 12288 Bytes
Goji: 5872 Bytes
GoJsonRest: 14816 Bytes
GorillaMux: 60096 Bytes
HttpRouter: 5768 Bytes
HttpTreeMux: 7760 Bytes
Kocha: 184480 Bytes
Martini: 48584 Bytes
Pat: 1976 Bytes
TigerTonic: 10520 Bytes
Traffic: 45672 Bytes
#Static Routes: 157
HttpServeMux: 18272 Bytes
Beego: 104696 Bytes
Denco: 58504 Bytes
GocraftWeb: 60024 Bytes
Goji: 35008 Bytes
GoJsonRest: 145816 Bytes
GorillaMux: 327624 Bytes
HttpRouter: 24632 Bytes
HttpTreeMux: 78696 Bytes
Kocha: 117920 Bytes
Martini: 317312 Bytes
Pat: 16712 Bytes
TigerTonic: 87880 Bytes
Traffic: 297736 Bytes
testing: warning: no tests to run
PASS
BenchmarkBeego_Param 500000 4086 ns/op 1181 B/op 17 allocs/op
BenchmarkDenco_Param 5000000 537 ns/op 50 B/op 2 allocs/op
BenchmarkGocraftWeb_Param 1000000 2136 ns/op 674 B/op 9 allocs/op
BenchmarkGoji_Param 1000000 1115 ns/op 343 B/op 2 allocs/op
BenchmarkGoJsonRest_Param 200000 7692 ns/op 1803 B/op 30 allocs/op
BenchmarkGorillaMux_Param 500000 5742 ns/op 786 B/op 7 allocs/op
BenchmarkHttpRouter_Param 10000000 203 ns/op 33 B/op 1 allocs/op
BenchmarkHttpTreeMux_Param 2000000 763 ns/op 343 B/op 2 allocs/op
BenchmarkKocha_Param 5000000 502 ns/op 58 B/op 3 allocs/op
BenchmarkMartini_Param 200000 7908 ns/op 1187 B/op 13 allocs/op
BenchmarkPat_Param 1000000 2284 ns/op 687 B/op 14 allocs/op
BenchmarkTigerTonic_Param 500000 3875 ns/op 1027 B/op 19 allocs/op
BenchmarkTraffic_Param 200000 7215 ns/op 2030 B/op 23 allocs/op
BenchmarkBeego_Param5 200000 8548 ns/op 1606 B/op 22 allocs/op
BenchmarkDenco_Param5 1000000 1624 ns/op 409 B/op 5 allocs/op
BenchmarkGocraftWeb_Param5 500000 3234 ns/op 948 B/op 12 allocs/op
BenchmarkGoji_Param5 1000000 1470 ns/op 343 B/op 2 allocs/op
BenchmarkGoJsonRest_Param5 200000 13307 ns/op 3289 B/op 41 allocs/op
BenchmarkGorillaMux_Param5 200000 10386 ns/op 916 B/op 7 allocs/op
BenchmarkHttpRouter_Param5 5000000 448 ns/op 163 B/op 1 allocs/op
BenchmarkHttpTreeMux_Param5 1000000 1192 ns/op 343 B/op 2 allocs/op
BenchmarkKocha_Param5 1000000 1922 ns/op 449 B/op 10 allocs/op
BenchmarkMartini_Param5 100000 16086 ns/op 1317 B/op 13 allocs/op
BenchmarkPat_Param5 500000 4992 ns/op 1494 B/op 25 allocs/op
BenchmarkTigerTonic_Param5 200000 13274 ns/op 2640 B/op 53 allocs/op
BenchmarkTraffic_Param5 200000 11942 ns/op 2357 B/op 31 allocs/op
BenchmarkBeego_Param20 200000 11251 ns/op 2649 B/op 24 allocs/op
BenchmarkDenco_Param20 500000 4262 ns/op 1679 B/op 7 allocs/op
BenchmarkGocraftWeb_Param20 200000 10206 ns/op 3864 B/op 17 allocs/op
BenchmarkGoji_Param20 500000 4280 ns/op 1261 B/op 2 allocs/op
BenchmarkGoJsonRest_Param20 50000 32105 ns/op 10666 B/op 77 allocs/op
BenchmarkGorillaMux_Param20 100000 19796 ns/op 3312 B/op 10 allocs/op
BenchmarkHttpRouter_Param20 1000000 1297 ns/op 653 B/op 1 allocs/op
BenchmarkHttpTreeMux_Param20 500000 6761 ns/op 2219 B/op 4 allocs/op
BenchmarkKocha_Param20 500000 5925 ns/op 1839 B/op 27 allocs/op
BenchmarkMartini_Param20 50000 70254 ns/op 3714 B/op 16 allocs/op
BenchmarkPat_Param20 500000 5002 ns/op 1494 B/op 25 allocs/op
BenchmarkTigerTonic_Param20 50000 52744 ns/op 11270 B/op 179 allocs/op
BenchmarkTraffic_Param20 50000 35244 ns/op 8251 B/op 68 allocs/op
BenchmarkBeego_ParamWrite 500000 5232 ns/op 1622 B/op 22 allocs/op
BenchmarkDenco_ParamWrite 5000000 545 ns/op 50 B/op 2 allocs/op
BenchmarkGocraftWeb_ParamWrite 1000000 2189 ns/op 683 B/op 10 allocs/op
BenchmarkGoji_ParamWrite 1000000 1171 ns/op 343 B/op 2 allocs/op
BenchmarkGoJsonRest_ParamWrite 200000 9266 ns/op 2284 B/op 35 allocs/op
BenchmarkGorillaMux_ParamWrite 500000 6357 ns/op 786 B/op 7 allocs/op
BenchmarkHttpRouter_ParamWrite 10000000 267 ns/op 33 B/op 1 allocs/op
BenchmarkHttpTreeMux_ParamWrite 2000000 851 ns/op 343 B/op 2 allocs/op
BenchmarkKocha_ParamWrite 5000000 636 ns/op 58 B/op 3 allocs/op
BenchmarkMartini_ParamWrite 200000 8298 ns/op 1287 B/op 16 allocs/op
BenchmarkPat_ParamWrite 500000 4045 ns/op 1129 B/op 19 allocs/op
BenchmarkTigerTonic_ParamWrite 500000 6124 ns/op 1485 B/op 25 allocs/op
BenchmarkTraffic_ParamWrite 200000 8771 ns/op 2464 B/op 27 allocs/op
BenchmarkBeego_GithubStatic 500000 3187 ns/op 821 B/op 14 allocs/op
BenchmarkDenco_GithubStatic 20000000 85.1 ns/op 0 B/op 0 allocs/op
BenchmarkGocraftWeb_GithubStatic 1000000 1418 ns/op 314 B/op 6 allocs/op
BenchmarkGoji_GithubStatic 5000000 553 ns/op 0 B/op 0 allocs/op
BenchmarkGoJsonRest_GithubStatic 500000 6594 ns/op 1162 B/op 26 allocs/op
BenchmarkGorillaMux_GithubStatic 50000 48178 ns/op 460 B/op 6 allocs/op
BenchmarkHttpRouter_GithubStatic 20000000 76.0 ns/op 0 B/op 0 allocs/op
BenchmarkHttpTreeMux_GithubStatic 20000000 75.8 ns/op 0 B/op 0 allocs/op
BenchmarkKocha_GithubStatic 20000000 123 ns/op 0 B/op 0 allocs/op
BenchmarkMartini_GithubStatic 100000 24472 ns/op 862 B/op 12 allocs/op
BenchmarkPat_GithubStatic 100000 16136 ns/op 3789 B/op 76 allocs/op
BenchmarkTigerTonic_GithubStatic 5000000 446 ns/op 49 B/op 1 allocs/op
BenchmarkTraffic_GithubStatic 20000 88844 ns/op 23368 B/op 172 allocs/op
BenchmarkBeego_GithubParam 500000 4735 ns/op 1245 B/op 18 allocs/op
BenchmarkDenco_GithubParam 2000000 994 ns/op 116 B/op 3 allocs/op
BenchmarkGocraftWeb_GithubParam 500000 2815 ns/op 737 B/op 10 allocs/op
BenchmarkGoji_GithubParam 1000000 1786 ns/op 343 B/op 2 allocs/op
BenchmarkGoJsonRest_GithubParam 200000 10054 ns/op 2192 B/op 33 allocs/op
BenchmarkGorillaMux_GithubParam 50000 31640 ns/op 819 B/op 7 allocs/op
BenchmarkHttpRouter_GithubParam 5000000 452 ns/op 98 B/op 1 allocs/op
BenchmarkHttpTreeMux_GithubParam 1000000 1304 ns/op 343 B/op 2 allocs/op
BenchmarkKocha_GithubParam 1000000 1129 ns/op 132 B/op 5 allocs/op
BenchmarkMartini_GithubParam 50000 33193 ns/op 1220 B/op 13 allocs/op
BenchmarkPat_GithubParam 200000 10578 ns/op 2628 B/op 56 allocs/op
BenchmarkTigerTonic_GithubParam 200000 6432 ns/op 1484 B/op 28 allocs/op
BenchmarkTraffic_GithubParam 50000 37349 ns/op 7152 B/op 60 allocs/op
BenchmarkBeego_GithubAll 2000 1065850 ns/op 240491 B/op 3584 allocs/op
BenchmarkDenco_GithubAll 10000 167449 ns/op 21353 B/op 508 allocs/op
BenchmarkGocraftWeb_GithubAll 5000 516241 ns/op 136593 B/op 1915 allocs/op
BenchmarkGoji_GithubAll 2000 893455 ns/op 57363 B/op 347 allocs/op
BenchmarkGoJsonRest_GithubAll 1000 1984326 ns/op 407513 B/op 6558 allocs/op
BenchmarkGorillaMux_GithubAll 100 19408668 ns/op 153479 B/op 1420 allocs/op
BenchmarkHttpRouter_GithubAll 20000 78090 ns/op 14101 B/op 169 allocs/op
BenchmarkHttpTreeMux_GithubAll 10000 182227 ns/op 57365 B/op 347 allocs/op
BenchmarkKocha_GithubAll 10000 208182 ns/op 24063 B/op 847 allocs/op
BenchmarkMartini_GithubAll 100 12874177 ns/op 245658 B/op 2942 allocs/op
BenchmarkPat_GithubAll 500 6100295 ns/op 1589303 B/op 32576 allocs/op
BenchmarkTigerTonic_GithubAll 2000 1302858 ns/op 251030 B/op 6087 allocs/op
BenchmarkTraffic_GithubAll 100 17070060 ns/op 3175411 B/op 24953 allocs/op
BenchmarkBeego_GPlusStatic 500000 3037 ns/op 804 B/op 14 allocs/op
BenchmarkDenco_GPlusStatic 50000000 48.1 ns/op 0 B/op 0 allocs/op
BenchmarkGocraftWeb_GPlusStatic 1000000 1419 ns/op 297 B/op 6 allocs/op
BenchmarkGoji_GPlusStatic 5000000 438 ns/op 0 B/op 0 allocs/op
BenchmarkGoJsonRest_GPlusStatic 500000 7296 ns/op 1146 B/op 26 allocs/op
BenchmarkGorillaMux_GPlusStatic 500000 4803 ns/op 460 B/op 6 allocs/op
BenchmarkHttpRouter_GPlusStatic 50000000 44.3 ns/op 0 B/op 0 allocs/op
BenchmarkHttpTreeMux_GPlusStatic 50000000 43.5 ns/op 0 B/op 0 allocs/op
BenchmarkKocha_GPlusStatic 20000000 88.3 ns/op 0 B/op 0 allocs/op
BenchmarkMartini_GPlusStatic 500000 6673 ns/op 862 B/op 12 allocs/op
BenchmarkPat_GPlusStatic 5000000 446 ns/op 99 B/op 2 allocs/op
BenchmarkTigerTonic_GPlusStatic 10000000 254 ns/op 33 B/op 1 allocs/op
BenchmarkTraffic_GPlusStatic 500000 5975 ns/op 1513 B/op 19 allocs/op
BenchmarkBeego_GPlusParam 500000 4392 ns/op 1180 B/op 17 allocs/op
BenchmarkDenco_GPlusParam 5000000 484 ns/op 50 B/op 2 allocs/op
BenchmarkGocraftWeb_GPlusParam 1000000 2288 ns/op 673 B/op 9 allocs/op
BenchmarkGoji_GPlusParam 1000000 1436 ns/op 343 B/op 2 allocs/op
BenchmarkGoJsonRest_GPlusParam 200000 11334 ns/op 1821 B/op 30 allocs/op
BenchmarkGorillaMux_GPlusParam 200000 11297 ns/op 786 B/op 7 allocs/op
BenchmarkHttpRouter_GPlusParam 5000000 299 ns/op 65 B/op 1 allocs/op
BenchmarkHttpTreeMux_GPlusParam 2000000 874 ns/op 343 B/op 2 allocs/op
BenchmarkKocha_GPlusParam 5000000 655 ns/op 58 B/op 3 allocs/op
BenchmarkMartini_GPlusParam 200000 10901 ns/op 1187 B/op 13 allocs/op
BenchmarkPat_GPlusParam 1000000 2858 ns/op 753 B/op 14 allocs/op
BenchmarkTigerTonic_GPlusParam 500000 4615 ns/op 1103 B/op 19 allocs/op
BenchmarkTraffic_GPlusParam 200000 10742 ns/op 2043 B/op 23 allocs/op
BenchmarkBeego_GPlus2Params 200000 5683 ns/op 1244 B/op 18 allocs/op
BenchmarkDenco_GPlus2Params 2000000 987 ns/op 116 B/op 3 allocs/op
BenchmarkGocraftWeb_GPlus2Params 1000000 2731 ns/op 736 B/op 10 allocs/op
BenchmarkGoji_GPlus2Params 1000000 2037 ns/op 343 B/op 2 allocs/op
BenchmarkGoJsonRest_GPlus2Params 200000 10705 ns/op 2195 B/op 33 allocs/op
BenchmarkGorillaMux_GPlus2Params 100000 28040 ns/op 819 B/op 7 allocs/op
BenchmarkHttpRouter_GPlus2Params 5000000 337 ns/op 65 B/op 1 allocs/op
BenchmarkHttpTreeMux_GPlus2Params 2000000 1136 ns/op 343 B/op 2 allocs/op
BenchmarkKocha_GPlus2Params 1000000 1144 ns/op 132 B/op 5 allocs/op
BenchmarkMartini_GPlus2Params 50000 34688 ns/op 1320 B/op 17 allocs/op
BenchmarkPat_GPlus2Params 200000 8651 ns/op 2403 B/op 41 allocs/op
BenchmarkTigerTonic_GPlus2Params 500000 7717 ns/op 1586 B/op 28 allocs/op
BenchmarkTraffic_GPlus2Params 50000 29947 ns/op 3627 B/op 35 allocs/op
BenchmarkBeego_GPlusAll 50000 62392 ns/op 14947 B/op 223 allocs/op
BenchmarkDenco_GPlusAll 200000 9128 ns/op 887 B/op 27 allocs/op
BenchmarkGocraftWeb_GPlusAll 50000 31896 ns/op 8352 B/op 117 allocs/op
BenchmarkGoji_GPlusAll 100000 18817 ns/op 3775 B/op 22 allocs/op
BenchmarkGoJsonRest_GPlusAll 10000 122218 ns/op 24098 B/op 402 allocs/op
BenchmarkGorillaMux_GPlusAll 10000 174504 ns/op 9730 B/op 91 allocs/op
BenchmarkHttpRouter_GPlusAll 500000 3877 ns/op 660 B/op 11 allocs/op
BenchmarkHttpTreeMux_GPlusAll 200000 10027 ns/op 3775 B/op 22 allocs/op
BenchmarkKocha_GPlusAll 200000 9599 ns/op 1014 B/op 43 allocs/op
BenchmarkMartini_GPlusAll 10000 196508 ns/op 15549 B/op 194 allocs/op
BenchmarkPat_GPlusAll 50000 70916 ns/op 17706 B/op 346 allocs/op
BenchmarkTigerTonic_GPlusAll 50000 73256 ns/op 15489 B/op 322 allocs/op
BenchmarkTraffic_GPlusAll 10000 233066 ns/op 42154 B/op 447 allocs/op
BenchmarkBeego_ParseStatic 500000 3606 ns/op 821 B/op 14 allocs/op
BenchmarkDenco_ParseStatic 50000000 60.8 ns/op 0 B/op 0 allocs/op
BenchmarkGocraftWeb_ParseStatic 1000000 1401 ns/op 314 B/op 6 allocs/op
BenchmarkGoji_ParseStatic 5000000 608 ns/op 0 B/op 0 allocs/op
BenchmarkGoJsonRest_ParseStatic 500000 7214 ns/op 1146 B/op 26 allocs/op
BenchmarkGorillaMux_ParseStatic 200000 9809 ns/op 460 B/op 6 allocs/op
BenchmarkHttpRouter_ParseStatic 50000000 51.4 ns/op 0 B/op 0 allocs/op
BenchmarkHttpTreeMux_ParseStatic 20000000 79.0 ns/op 0 B/op 0 allocs/op
BenchmarkKocha_ParseStatic 20000000 107 ns/op 0 B/op 0 allocs/op
BenchmarkMartini_ParseStatic 500000 7797 ns/op 862 B/op 12 allocs/op
BenchmarkPat_ParseStatic 1000000 1250 ns/op 249 B/op 5 allocs/op
BenchmarkTigerTonic_ParseStatic 5000000 412 ns/op 49 B/op 1 allocs/op
BenchmarkTraffic_ParseStatic 200000 11557 ns/op 2395 B/op 25 allocs/op
BenchmarkBeego_ParseParam 500000 4492 ns/op 1196 B/op 17 allocs/op
BenchmarkDenco_ParseParam 5000000 526 ns/op 50 B/op 2 allocs/op
BenchmarkGocraftWeb_ParseParam 1000000 2268 ns/op 689 B/op 9 allocs/op
BenchmarkGoji_ParseParam 1000000 1509 ns/op 343 B/op 2 allocs/op
BenchmarkGoJsonRest_ParseParam 200000 9156 ns/op 1807 B/op 30 allocs/op
BenchmarkGorillaMux_ParseParam 200000 9726 ns/op 786 B/op 7 allocs/op
BenchmarkHttpRouter_ParseParam 10000000 263 ns/op 65 B/op 1 allocs/op
BenchmarkHttpTreeMux_ParseParam 2000000 936 ns/op 343 B/op 2 allocs/op
BenchmarkKocha_ParseParam 5000000 629 ns/op 58 B/op 3 allocs/op
BenchmarkMartini_ParseParam 200000 10959 ns/op 1187 B/op 13 allocs/op
BenchmarkPat_ParseParam 500000 4245 ns/op 1197 B/op 20 allocs/op
BenchmarkTigerTonic_ParseParam 500000 4236 ns/op 1084 B/op 19 allocs/op
BenchmarkTraffic_ParseParam 200000 9281 ns/op 2329 B/op 25 allocs/op
BenchmarkBeego_Parse2Params 500000 4585 ns/op 1244 B/op 18 allocs/op
BenchmarkDenco_Parse2Params 2000000 755 ns/op 116 B/op 3 allocs/op
BenchmarkGocraftWeb_Parse2Params 1000000 2579 ns/op 736 B/op 10 allocs/op
BenchmarkGoji_Parse2Params 1000000 1433 ns/op 343 B/op 2 allocs/op
BenchmarkGoJsonRest_Parse2Params 200000 9785 ns/op 2166 B/op 33 allocs/op
BenchmarkGorillaMux_Parse2Params 200000 10083 ns/op 819 B/op 7 allocs/op
BenchmarkHttpRouter_Parse2Params 5000000 292 ns/op 65 B/op 1 allocs/op
BenchmarkHttpTreeMux_Parse2Params 2000000 947 ns/op 343 B/op 2 allocs/op
BenchmarkKocha_Parse2Params 2000000 943 ns/op 132 B/op 5 allocs/op
BenchmarkMartini_Parse2Params 200000 10054 ns/op 1220 B/op 13 allocs/op
BenchmarkPat_Parse2Params 500000 3669 ns/op 908 B/op 21 allocs/op
BenchmarkTigerTonic_Parse2Params 500000 6553 ns/op 1488 B/op 28 allocs/op
BenchmarkTraffic_Parse2Params 200000 9363 ns/op 2134 B/op 25 allocs/op
BenchmarkBeego_ParseAll 10000 103330 ns/op 27503 B/op 420 allocs/op
BenchmarkDenco_ParseAll 200000 11258 ns/op 1008 B/op 35 allocs/op
BenchmarkGocraftWeb_ParseAll 50000 51958 ns/op 14318 B/op 210 allocs/op
BenchmarkGoji_ParseAll 100000 29556 ns/op 5491 B/op 33 allocs/op
BenchmarkGoJsonRest_ParseAll 10000 211105 ns/op 41617 B/op 759 allocs/op
BenchmarkGorillaMux_ParseAll 5000 380477 ns/op 17274 B/op 175 allocs/op
BenchmarkHttpRouter_ParseAll 500000 5238 ns/op 665 B/op 16 allocs/op
BenchmarkHttpTreeMux_ParseAll 200000 15440 ns/op 5491 B/op 33 allocs/op
BenchmarkKocha_ParseAll 200000 15235 ns/op 1160 B/op 54 allocs/op
BenchmarkMartini_ParseAll 10000 252829 ns/op 27712 B/op 333 allocs/op
BenchmarkPat_ParseAll 20000 78359 ns/op 18294 B/op 385 allocs/op
BenchmarkTigerTonic_ParseAll 20000 99349 ns/op 20868 B/op 420 allocs/op
BenchmarkTraffic_ParseAll 10000 331941 ns/op 70677 B/op 763 allocs/op
BenchmarkHttpServeMux_StaticAll 1000 1634267 ns/op 104 B/op 8 allocs/op
BenchmarkBeego_StaticAll 5000 539431 ns/op 128898 B/op 2226 allocs/op
BenchmarkDenco_StaticAll 100000 19368 ns/op 0 B/op 0 allocs/op
BenchmarkGocraftWeb_StaticAll 10000 263807 ns/op 49239 B/op 951 allocs/op
BenchmarkGoji_StaticAll 10000 128495 ns/op 0 B/op 0 allocs/op
BenchmarkGoJsonRest_StaticAll 2000 1202367 ns/op 183070 B/op 4129 allocs/op
BenchmarkGorillaMux_StaticAll 500 6412376 ns/op 72384 B/op 966 allocs/op
BenchmarkHttpRouter_StaticAll 100000 25137 ns/op 0 B/op 0 allocs/op
BenchmarkHttpTreeMux_StaticAll 100000 25813 ns/op 0 B/op 0 allocs/op
BenchmarkKocha_StaticAll 50000 36208 ns/op 0 B/op 0 allocs/op
BenchmarkMartini_StaticAll 500 6262839 ns/op 145782 B/op 2521 allocs/op
BenchmarkPat_StaticAll 1000 2381715 ns/op 554324 B/op 11250 allocs/op
BenchmarkTigerTonic_StaticAll 20000 85906 ns/op 7780 B/op 158 allocs/op
BenchmarkTraffic_StaticAll 100 14011627 ns/op 3797675 B/op 27948 allocs/op
ok github.com/julienschmidt/go-http-routing-benchmark 500.277s
The project https://github.com/ant0ine/go-json-rest/ also uses tree prefix like approach and will be better inclusion.
Hello! Will be great if you can add https://github.com/go-playground/lars to the next round. Thanks!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.