An open-source entry in TopGit's GitHub warehouse: smallnest/go-web-framework-benchmark, 2.1k stars, Go. :zap: Go web framework benchmark
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
This benchmark suite aims to compare the performance of Go web frameworks. It is inspired by Go HTTP Router Benchmark but this benchmark suite is different with that. Go HTTP Router Benchmark suit aims to compare the performance of routers but this Benchmark suit aims to compare whole HTTP request processing.
Last Test Updated: 2020-05
test environment
CPU: KVM Virtual CPU version(2 GHz, 4 cores)
Memory: 16G
Go: go1.18.5 linux/amd64
OS: Ubuntu 22.04.1 LTS with Kernel 5.15.0-41-generic
Tested web frameworks (in alphabetical order)
Only test those webframeworks which are stable
atreugo
baa
beego
bone
chi
clevergo
default http
denco
don
echo
fasthttp-routing
fasthttp/router
fasthttp
fiber
gear
gearbox
gem
gin
goframe
go-ozzo
go-restful
go-tigertonic
goji
goji
golf
gorilla
gorouter
goyave
httprouter
httptreemux
httpz
indigo
lars
lion
macaron
muxie
negroni
pat
pulse
pure
r2router
tango
tinyrouter
treemux
violetear
vulcan
webgo
some libs have not been maintained and the test code has removed them
Motivation
When I investigated performance of Go web frameworks, I found Go HTTP Router Benchmark, created by Julien Schmidt. He also developed a high performance http router: httprouter. I had thought I got the performance result until I created a piece of codes to mock the real business logics:
When I use the above codes to test those web frameworks, the token time of route selection is not so important in the whole http request processing, although performance of route selection of web frameworks are very different.
So I create this project to compare performance of web frameworks including connection, route selection, handler processing. It mocks business logics and can set a special processing time.
Then you can get some interesting results if you use it to test.
Implementation
When you test a web framework, this test suit will starts a simple http server implemented by this web framework. It is a real http server and only contains GET url: "/hello".
When this server processes this url, it will sleep n milliseconds in this handler. It mocks the business logics such as:
read data from sockets
write data to disk
access databases
access cache servers
invoke other microservices
……
It contains a test.sh that can do those tests automatically.
It uses wrk to test.
Basic Test
The first test case is to mock 0 ms, 10 ms, 100 ms, 500 ms processing time in handlers.
the concurrency clients are 5000.
Latency is the time of real processing time by web servers. The smaller is the better.
Allocs is the heap allocations by web servers when test is running. The unit is MB. The smaller is the better.
If we enable http pipelining, test result as below:
Concurrency Test
In 30 ms processing time, the test result for 100, 1000, 5000 clients is:
If we enable http pipelining, test result as below:
cpu-bound case Test
Usage
You should install this package first if you want to run this test.
go get github.com/smallnest/go-web-framework-benchmark
It takes a while to install a large number of dependencies that need to be downloaded. Once that command completes, you can run:
cd $GOPATH/src/github.com/smallnest/go-web-framework-benchmark
go build -o gowebbenchmark .
./test.sh
It will generate test results in processtime.csv and concurrency.csv. You can modify test.sh to execute your customized test cases.
If you also want to generate latency data and allocation data, you can run the script:
./test-latency.sh
If you don't want use keepalive, you can run:
./test-latency-nonkeepalive.sh
If you want to test http pipelining, you can run:
./test-pipelining.sh
If you want to test some of web frameworks, you can modify the test script and only keep your selected web frameworks:
NOTE: comparing 2 webframeworks consumes approx. 11-13 minutes (doesn't depend on the machine). Just test.sh with all
the webframeworks enabled will take a couple of hours to run.
Plot
All the graphs are generated automatically as the ./test.sh finishes. However, if the run was interrupted, you can
generate them manually of partial data by executing plot.sh in testresults directory.
Interactive HTML charts
In addition to the static PNGs, an interactive HTML view is generated from the same CSV data — no gnuplot required to
view it. It lets you hover for exact per-framework values, toggle frameworks via the legend, and switch between bar and
line charts, which makes crowded results much easier to read.
Open testresults/index.html in a browser, or regenerate it after a run:
cd testresults
go run ./genhtml
plot.sh / plot_mac.sh already invoke it as their last step, so it stays in sync with the PNGs.
Add new web framework
Welcome to add new Go web frameworks. You can follow the below steps and send me a pull request.
Does smallnest/go-web-framework-benchmark have a project website?
No homepage URL was recorded for smallnest/go-web-framework-benchmark in TopGit's last sync. The README tab above frequently contains screenshots and demo links, or check the repository description on GitHub.
Is smallnest/go-web-framework-benchmark open source?
Yes — smallnest/go-web-framework-benchmark ships under the Apache-2.0 license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/smallnest/go-web-framework-benchmark.
What is smallnest/go-web-framework-benchmark?
smallnest/go-web-framework-benchmark (smallnest/go-web-framework-benchmark) is a Go project on GitHub. From the project's own README: :zap: Go web framework benchmark
What license does smallnest/go-web-framework-benchmark use?
smallnest/go-web-framework-benchmark is released under the Apache-2.0 license. Always verify the LICENSE file directly on GitHub for the authoritative terms — license strings can be edited out of sync with a project's actual stance.
Where do I read more about smallnest/go-web-framework-benchmark?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/smallnest/go-web-framework-benchmark is the definitive source.
Read full README in the tab above.
Curious whether go-web-framework-benchmark is right for you?
Let ChatGPT, Claude, or Perplexity look into it — click below and see what AI actually says about go-web-framework-benchmark.