mirror of
https://git.sr.ht/~seirdy/seirdy.one
synced 2024-11-10 00:12:09 +00:00
New note: short cache busting fingerprints
This commit is contained in:
parent
0e876142cc
commit
447a2e1600
1 changed files with 54 additions and 0 deletions
54
content/notes/short-cache-busting-fingerprints-in-hugo.md
Normal file
54
content/notes/short-cache-busting-fingerprints-in-hugo.md
Normal file
|
@ -0,0 +1,54 @@
|
|||
---
|
||||
title: "Short cache busting fingerprints in Hugo"
|
||||
date: 2024-03-28T00:16:48-04:00
|
||||
replyURI: "https://github.com/gohugoio/hugo/issues/6241"
|
||||
replyTitle: "Shorter fingerprinting (Hugo issue 6241)"
|
||||
replyType: "DiscussionForumPosting"
|
||||
replyAuthor: "XhmikosR"
|
||||
replyAuthorURI: "https://github.com/XhmikosR"
|
||||
---
|
||||
|
||||
I use a quick `crypto.FNV32a`-based fix for short cache-busting fingerprints that doesn't directly rely on the unstable `.Key` method.
|
||||
|
||||
{{<codefigure>}}{{<codecaption lang="Go template">}}
|
||||
|
||||
I use Hugo's `crypto.FNV32a` to generate a short hash, then copy the resource to a new path with that fingerprint.
|
||||
|
||||
{{</codecaption>}}
|
||||
|
||||
```figure
|
||||
{{ $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 -}}
|
||||
```
|
||||
|
||||
{{</codefigure>}}
|
||||
|
||||
{{<codefigure>}}{{<codecaption lang="Go template">}}
|
||||
|
||||
You can [see it used in my site's <code>head</code> element](https://git.sr.ht/~seirdy/seirdy.one/blob/master/layouts/partials/head.html). I invoke it using `partialCached` so the fingerprinting only happens once per resource:
|
||||
|
||||
{{</codecaption>}}
|
||||
|
||||
```figure
|
||||
{{ $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 }}
|
||||
```
|
||||
|
||||
{{</codefigure>}}
|
||||
|
||||
{{<codefigure>}}{{<codecaption lang="HTML">}}
|
||||
|
||||
Here's a snippet of the final rendered result:
|
||||
|
||||
{{</codecaption>}}
|
||||
|
||||
```figure
|
||||
<link rel="icon" sizes="any" href="/favicon.2229316949.svg" type="image/svg+xml"/>
|
||||
```
|
||||
|
||||
{{</codefigure>}}
|
||||
|
||||
Encoding it to a higher base and using alphanumerics could shave off 1-2 ch.
|
Loading…
Reference in a new issue