summaryrefslogtreecommitdiffstats
path: root/tpl/tplimpl/template_funcs.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-01-07 10:23:24 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-01-07 13:18:19 +0100
commit1cf235412f98b42aefe368e99a0e9e95bae6eef7 (patch)
tree0a73bcff5a768153e3ef36ff2f563a3e3418c255 /tpl/tplimpl/template_funcs.go
parentdf6e9efd8f345707932231ea23dc8713afb5b026 (diff)
tpl: Put Go's internal template funcs in Hugo's map
``` name old time/op new time/op delta SiteNew/Many_HTML_templates-16 43.4ms ± 0% 42.7ms ± 0% -1.71% (p=0.016 n=4+5) name old alloc/op new alloc/op delta SiteNew/Many_HTML_templates-16 17.5MB ± 0% 17.5MB ± 0% ~ (p=0.690 n=5+5) name old allocs/op new allocs/op delta SiteNew/Many_HTML_templates-16 247k ± 0% 247k ± 0% ~ (p=0.310 n=5+5) ``` Fixes #6717
Diffstat (limited to 'tpl/tplimpl/template_funcs.go')
-rw-r--r--tpl/tplimpl/template_funcs.go20
1 files changed, 19 insertions, 1 deletions
diff --git a/tpl/tplimpl/template_funcs.go b/tpl/tplimpl/template_funcs.go
index 6be8aa8b7..88869940d 100644
--- a/tpl/tplimpl/template_funcs.go
+++ b/tpl/tplimpl/template_funcs.go
@@ -108,7 +108,25 @@ func newTemplateExecuter(d *deps.Deps) (texttemplate.Executer, map[string]reflec
funcsv := make(map[string]reflect.Value)
for k, v := range funcs {
- funcsv[k] = reflect.ValueOf(v)
+ vv := reflect.ValueOf(v)
+ funcsv[k] = vv
+ }
+
+ // Duplicate Go's internal funcs here for faster lookups.
+ for k, v := range template.GoFuncs {
+ if _, exists := funcsv[k]; !exists {
+ vv, ok := v.(reflect.Value)
+ if !ok {
+ vv = reflect.ValueOf(v)
+ }
+ funcsv[k] = vv
+ }
+ }
+
+ for k, v := range texttemplate.GoFuncs {
+ if _, exists := funcsv[k]; !exists {
+ funcsv[k] = v
+ }
}
exeHelper := &templateExecHelper{