5 ms·
Golang web frameworks benchmark
- ch4s3 12y agoWow, I knew Gin was supposed to be faster than martini, but seeing that large of a spread was pretty interesting.
- beckler 12y agoNot totally sure, but I think Gin is faster because it uses HttpRouter under the covers.
- ch4s3 12y agoIndeed it does. http://gin-gonic.github.io/gin/ http://gin-gonic.github.io/gin/
- dougbarrett 12y agoAnd httprouter is a bit limited as far as what you can do with the url rules, understadibly. I've documented it here: https://www.dougcodes.com/go-lang/gin-gonic-may-be-40x-faster-than-martini-but-it-is-not-better https://www.dougcodes.com/go-lang/gin-gonic-may-be-40x-faste... and here: https://www.dougcodes.com/go-lang/martini-to-gin-back-to-martini-and-on-to-negroni-and-mux https://www.dougcodes.com/go-lang/martini-to-gin-back-to-mar... Negroni/Gorilla Mux seems to be a good combination for me, but Jeremy Saenz is coming out with a new mux that I'm interested in trying when it's released to see how it compares to Gorilla Mux.
- landr0id 12y agoI'm kind of surprised Negroni wasn't among those tested.
- rlbaker 12y agoI believe that Negroni is considered a library rather than a framework. https://github.com/codegangsta/negroni#is-negroni-a-framework https://github.com/codegangsta/negroni#is-negroni-a-framewor... But I don't know why that would preclude it from these benchmarks because httprouter is not a full fledged framework either.
- Yadi 12y agoI know this is a dumb question, but is there a conclusion to the benchmarks that which one would be more ideal to use? I'm just learning GO, that is why I'm asking.
- Zikes 12y agoI think the tl;dr at the top of the page answers that the best: HttpRouter is the king of performance, scoring first on ALL tests. 2nd place goes to ace if you don’t need middleware, and Gin if you do. 3rd place goes to Goji which is mature, stable and all things considered awesome.
- Yadi 12y agoThanks!
- Yadi 12y agoI know this is a dumb question, but is there a conclusion to the benchmarks that which one would be more ideal to use? I'm just learning GO, that is why I'm asking.
- Inflatablewoman 12y agoVery interesting. Thanks for posting this. I have been using TigerTonic, but will give Gin a go after reading this.
- maximveksler 12y agoI hope to not disappoint you, or us as a matter of fact :) hit us up on @hellodebug we will be building this open sourced.
- jsherer 12y agoGenuinely curious, are there any cases of production Go environments where routing is the bottleneck of their HTTP services? I'd think any kind of data access in the service would be the bottleneck, not routing.
- elmin 12y agoThis is my question as well. With the exception of some very specialized applications, I can't see why any of this would have a significant impact on the real world performance of actual services.
- elithrar 12y agoExtremely few. 99%+ of your bottleneck will be in template rendering or DB access. Routing is so fast as to not matter for even "large" web applications.
- VanillaCafe 12y agoThe way I look at it is composing benchmarks to estimate the upper bound on the number of pages that can be served per second. So for GITHUBALL for instance: * BenchmarkHttpRouter_GithubAll at 66732 ns/op serves at most 15k pages/second/server, versus say * BenchmarkGoji_GithubAll at 752515 ns/op serves at most 1.3k pages/second/server Or for GPLUSALL * BenchmarkHttpRouter_GPlusAll at 3258 ns/op serves at most 310k pages/second/server, versus * BenchmarkGoji_GPlusAll at 15260 ns/op serves at most 66k pages/second/server
- rdtsc 12y agoCan imagine it might be it is used as a proxy/gateway to set of servers that then do data access.
- falcolas 12y agoSilly question, but where's the "plain net/http" benchmark? I haven't found a case where I've missed having an http framework. Would be interesting to see what the baseline is.
- maximveksler 12y agoBasically there aren’t much reasons besides security considerations to use net/http multiplexer at all. The baseline was profiled under STATICALL as the default net/http multiplexer does not support dynamic paths http://golang.org/pkg/net/http/#ServeMux http://golang.org/pkg/net/http/#ServeMux. The benchmark is named BenchmarkHttpServeMux_StaticAll you can read the code at https://github.com/julienschmidt/go-http-routing-benchmark/blob/master/static_test.go#L204 https://github.com/julienschmidt/go-http-routing-benchmark/b.... Frankly, net/http it not a very good http router. The results show that julienschmidt/httprouter trie based implementing outperforms net/http by 60x.