« Back to home

Playing with Go1.1beta2, it's much faster!

Posted on

One month ago I wrote some benchmarks for my Go-UrlRouter package. Yesterday Go1.1beta2 has been released, lets see how much faster it is for this particular project.

Go1.0.3

go-urlrouter$ go test -bench ".*"
PASS
BenchmarkNoCompression     50000             43049 ns/op
BenchmarkCompression      100000             25114 ns/op
BenchmarkRegExpLoop         2000           1090131 ns/op
ok      github.com/ant0ine/go-urlrouter 7.748s

Go1.1beta2

go-urlrouter$ /usr/local/go/bin/go test -bench ".*"
PASS
BenchmarkNoCompression    100000             27635 ns/op
BenchmarkCompression      100000             19632 ns/op
BenchmarkRegExpLoop         2000           1001683 ns/op
ok      github.com/ant0ine/go-urlrouter 7.419s

That gives us:

BenchmarkNoCompression 36% less time
BenchmarkCompression 22% less time
BenchmarkRegExpLoop 8% less time

The Trie implementation makes a heavy use of “maps” (especially when not compressed). 36% less time in this case! Impressive! For the implementation based on RegExp, the improvement is less significant.

Also note that with Go1.1beta2 the Trie based solution (compressed) is now 50 times faster than the RegExp based solution. (previously 40 times)

UPDATE:

Go comes with a nice utility to compare the benchmark outputs. Thanks @bradfitz for the info!

go-urlrouter$ /usr/local/go/misc/benchcmp 1.0.3.txt 1.1.txt
benchmark                 old ns/op    new ns/op    delta
BenchmarkNoCompression        43049        27635  -35.81%
BenchmarkCompression          25114        19632  -21.83%
BenchmarkRegExpLoop         1090131      1001683   -8.11%