With some help from @KvanTTT on github, lexing is taking most of the time.
with only doing the lexing :
func runAntlrParser(q string, b *testing.B) {
b.ResetTimer()
for i := 0; i < b.N; i++ {
input := antlr.NewInputStream(q)
lexer := parser.NewGraphQLPMLexer(input)
// for only lexer benchmark
t := lexer.NextToken()
for t.GetTokenType() != antlr.TokenEOF {
t = lexer.NextToken()
}
}
}
benchmark with only lexer :
/query$ gotb -test.run=XXX -v -benchtime=5s
BenchmarkQueryParse/spielberg:handwitten:-4 200000 45724 ns/op
BenchmarkQueryParse/spielberg:antlr:-4 5000 1468218 ns/op
BenchmarkQueryParse/tomhanks:handwitten:-4 500000 28649 ns/op
BenchmarkQueryParse/tomhanks:antlr:-4 5000 1538988 ns/op
BenchmarkQueryParse/nestedquery:handwritten:-4 100000 80210 ns/op
BenchmarkQueryParse/nestedquery:antlr:-4 5000 3029668 ns/op
PASS
ok
github.com/dgraph-io/dgraph/query 63.546s
// lexer + parser for antlr.
ashishnegi@ashish:~/work/golang/src/
github.com/dgraph-io/dgraph/query$ gotb -test.run=XXX -v -benchtime=5s
BenchmarkQueryParse/spielberg:handwitten:-4 300000 47772 ns/op
BenchmarkQueryParse/spielberg:antlr:-4 3000 1868297 ns/op
BenchmarkQueryParse/tomhanks:handwitten:-4 500000 27980 ns/op
BenchmarkQueryParse/tomhanks:antlr:-4 5000 1616518 ns/op
BenchmarkQueryParse/nestedquery:handwritten:-4 100000 74961 ns/op
BenchmarkQueryParse/nestedquery:antlr:-4 2000 3312977 ns/op
PASS
ok
github.com/dgraph-io/dgraph/query 58.056s
I think that this is well known issue that lexing takes most of the time.
Please share any general tips that i can try to bring down the numbers.