The template is over a hundred lines and full of pipelines, and
text/template isn't optimised to parse quickly, so it's no wonder that
delaying the parsing to the first template use makes 'go env' much
faster.
Like in the previous patches to get rid of global regexp.MustCompile
vars, use the newly introduced lazytemplate package. Close to two full
milliseconds are shaved off of 'go env' runs.
name old time/op new time/op delta
ExecGoEnv-8 4.27ms ± 0% 2.63ms ± 1% -38.43% (p=0.002 n=6+6)
Updates #29382.
Change-Id: I4e2569e51ddf2afe1b46eb1a9e9e5845f7a3b0bd
Reviewed-on: https://go-review.googlesource.com/c/155962
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
"go/doc"
"go/parser"
"go/token"
+ "internal/lazytemplate"
"path/filepath"
"sort"
"strings"
- "text/template"
"unicode"
"unicode/utf8"
)
return nil
}
-var testmainTmpl = template.Must(template.New("main").Parse(`
+var testmainTmpl = lazytemplate.New("main", `
package main
import (
{{end}}
}
-`))
+`)