Benchmarking fun times for use with urfave/negroni#158.
The results.txt
below was unscientifically generated on my 2014 MacBook Pro
while also running a bunch of other stuff 🎉.
Benchmarking fun times for use with urfave/negroni#158.
The results.txt
below was unscientifically generated on my 2014 MacBook Pro
while also running a bunch of other stuff 🎉.
package negronitest | |
import ( | |
"bytes" | |
"html/template" | |
"io/ioutil" | |
"log" | |
"testing" | |
"time" | |
) | |
var ( | |
l = log.New(ioutil.Discard, "x", 0) | |
tmpl = template.Must(template.New("log").Parse("{{.StartTime}} | {{.Status}} | \t {{.Duration}} | {{.Hostname}} | {{.Method}} {{.Path}}\n")) | |
) | |
func withPrintf(start time.Time) bool { | |
l.Printf("%v | %v | \t %v | %v | %v %v", start.Format(time.RFC3339), 200, time.Since(start), "some.host.example.com", "GET", "/wat") | |
return true | |
} | |
func withTemplateExecute(start time.Time) bool { | |
buf := &bytes.Buffer{} | |
err := tmpl.Execute(buf, map[string]interface{}{ | |
"StartTime": start, | |
"Status": 200, | |
"Duration": time.Since(start), | |
"Hostname": "some.host.example.com", | |
"Method": "GET", | |
"Path": "/wat", | |
}) | |
if err != nil { | |
panic(err) | |
} | |
l.Print(buf.String()) | |
return true | |
} | |
func BenchmarkPrintf(b *testing.B) { | |
start := time.Now() | |
for i := 0; i < b.N; i++ { | |
ok := withPrintf(start) | |
if !ok { | |
panic("NOT OK") | |
} | |
} | |
} | |
func BenchmarkTemplateExecute(b *testing.B) { | |
start := time.Now() | |
for i := 0; i < b.N; i++ { | |
ok := withTemplateExecute(start) | |
if !ok { | |
panic("NOT OK") | |
} | |
} | |
} |
test: | |
go test -v -bench=. -benchtime=30s 2>&1 | tee results.txt |
testing: warning: no tests to run | |
BenchmarkPrintf-8 30000000 1345 ns/op | |
BenchmarkTemplateExecute-8 3000000 12508 ns/op | |
PASS | |
ok _/Users/me/Downloads/negronitest 91.805s |