Skip to main content


Reply to Shorter fingerprinting (Hugo issue 6241) by XhmikosR

I use a quick crypto.FNV32a-based fix for short cache-busting fingerprints that doesn’t directly rely on the unstable .Key method.
I use Hugo’s crypto.FNV32a to generate a short hash, then copy the resource to a new path with that fingerprint.

{{ $resource := resources.Get . -}}
{{- $target_path_formatStr := (replaceRE `(\.[^\.]*)$` ".%d$1" .) -}}
{{- $cacheBuster := $resource.Content | crypto.FNV32a -}}
{{- $target_path := printf $target_path_formatStr $cacheBuster -}}
{{- return resources.Copy $target_path $resource -}}
You can see it used in my site’s head element. I invoke it using partialCached so the fingerprinting only happens once per resource:
{{ $icon_svg := partialCached "cache-bust.html" "/favicon.svg" "/favicon.svg" }}
{{- printf `<link rel="icon" sizes="any" href="%s" type="image/svg+xml" />` $icon_svg.RelPermalink | safeHTML }}
Here’s a snippet of the final rendered result:
<span><a href="#cb1-1"></a><span><</span><span>link</span><span> rel</span><span>=</span><span>"icon"</span><span> sizes</span><span>=</span><span>"any"</span><span> href</span><span>=</span><span>"/favicon.2229316949.svg"</span><span> type</span><span>=</span><span>"image/svg+xml"</span><span>/></span></span>

Encoding it to a higher base and using alphanumerics could shave off 1-2 ch.

Originally posted on seirdy.one: See Original (POSSE). #Hugo

#hugo
This entry was edited (1 month ago)
in reply to Seirdy

reposted cuz i screwed up the link (the midnight hour passed before i submitted and 2024-03-27 became 2024-03-28).