new post
This commit is contained in:
parent
afbba7e344
commit
a719edef94
|
@ -0,0 +1,39 @@
|
||||||
|
+++
|
||||||
|
date = '2024-11-15T22:33:10+01:00'
|
||||||
|
draft = false
|
||||||
|
title = 'More cache-busting'
|
||||||
|
tags = ['linux','CSS']
|
||||||
|
+++
|
||||||
|
|
||||||
|
**Well, that was easy.**
|
||||||
|
|
||||||
|
At the end of [my last post](cache-busting), I had successfully written a script to stop stale CSS from getting stuck in the browser cache. It was a rough-and-ready solution --- mine usually are --- but it did the job. The one optimization I wanted to make was to ensure that the cache gets busted *only* when there is fresh CSS, as opposed to on every build. I had expected to get a nice long blog post out of this, but it turns out to be a very easy job.
|
||||||
|
|
||||||
|
Here is the new build script:
|
||||||
|
```bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
prev_mtime=$(cat styles.mtime)
|
||||||
|
curr_mtime=$(stat -c %Y css/styles.css)
|
||||||
|
|
||||||
|
##has styles.css been modified?
|
||||||
|
if [[ $prev_mtime != "$curr_mtime" ]]; then
|
||||||
|
##update .mtimes
|
||||||
|
sed -i "1s/.*/$curr_mtime/" styles.mtime
|
||||||
|
echo "file has been modified!"
|
||||||
|
##insert the commit id
|
||||||
|
COMMIT="$(git rev-parse HEAD)"
|
||||||
|
sed -i "s/css?=\w*/css?v=${COMMIT}/g" index.html
|
||||||
|
fi
|
||||||
|
```
|
||||||
|
|
||||||
|
## What?
|
||||||
|
|
||||||
|
The key here is the command `stat`, which gives access to a load of useful data from the Linux filesystem. In this case, we're getting the time last modified. Try it for yourself and see what comes back.
|
||||||
|
```bash
|
||||||
|
echo $(stat -c %Y foo.file)
|
||||||
|
1731532468
|
||||||
|
```
|
||||||
|
|
||||||
|
So all I have to do is write that unix timecode to a file (with our old friend `sed`), then I can compare this value to whatever gets returned at build time, and only insert the Git id if the CSS has changed. Job done!
|
||||||
|
|
Loading…
Reference in New Issue