tpl: Use xxHash instead of MD5 to hash the deferred templates

Motivation is performance. These templates are typically very small, so the win is minor, I guess.
This commit is contained in:
Bjørn Erik Pedersen 2024-07-17 12:51:49 +02:00
parent f0ed91caba
commit 4d8bfa7f1c
No known key found for this signature in database
2 changed files with 10 additions and 1 deletions

View file

@ -27,6 +27,7 @@ import (
"unicode" "unicode"
"unicode/utf8" "unicode/utf8"
"github.com/cespare/xxhash/v2"
"github.com/spf13/afero" "github.com/spf13/afero"
"github.com/jdkato/prose/transform" "github.com/jdkato/prose/transform"
@ -257,6 +258,14 @@ func SliceToLower(s []string) []string {
return l return l
} }
// XxHashString takes a string and returns its xxHash hash.
func XxHashString(f string) string {
h := xxhash.New()
h.WriteString(f)
hash := h.Sum(nil)
return hex.EncodeToString(hash)
}
// MD5String takes a string and returns its MD5 hash. // MD5String takes a string and returns its MD5 hash.
func MD5String(f string) string { func MD5String(f string) string {
h := md5.New() h := md5.New()

View file

@ -254,7 +254,7 @@ func (c *templateContext) handleDefer(withNode *parse.WithNode) {
c.err = errors.New("resources.PostProcess cannot be used in a deferred template") c.err = errors.New("resources.PostProcess cannot be used in a deferred template")
return return
} }
innerHash := helpers.MD5String(s) innerHash := helpers.XxHashString(s)
deferredID := tpl.HugoDeferredTemplatePrefix + innerHash deferredID := tpl.HugoDeferredTemplatePrefix + innerHash
c.deferNodes[deferredID] = inner c.deferNodes[deferredID] = inner