]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
tpl: Use xxHash instead of MD5 to hash the deferred templates
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 17 Jul 2024 10:51:49 +0000 (12:51 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 17 Jul 2024 10:51:49 +0000 (12:51 +0200)
Motivation is performance. These templates are typically very small, so the win is minor, I guess.

helpers/general.go
tpl/tplimpl/template_ast_transformers.go

index af854041ddf2ce8906cb2f4352fa67ed78d7b213..fa65265b836a46c93c1355837937b256ab741db8 100644 (file)
@@ -27,6 +27,7 @@ import (
        "unicode"
        "unicode/utf8"
 
+       "github.com/cespare/xxhash/v2"
        "github.com/spf13/afero"
 
        "github.com/jdkato/prose/transform"
@@ -257,6 +258,14 @@ func SliceToLower(s []string) []string {
        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.
 func MD5String(f string) string {
        h := md5.New()
index 57730f82e6d082771dd5b7d21062374ba00ef8be..9eee64235d4530d56a6fa01142ef4a1ad44ee23a 100644 (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")
                return
        }
-       innerHash := helpers.MD5String(s)
+       innerHash := helpers.XxHashString(s)
        deferredID := tpl.HugoDeferredTemplatePrefix + innerHash
 
        c.deferNodes[deferredID] = inner