Whilst I haven’t written many new articles recently I have spent considerable time updating and revising the behind-the-scenes side of things, namely various security (TLS) settings on my VPS that hosts several sites including this one. Another thing I have also worked to enhance recently is to improve my use of gzip, and a new format called brotli
Briefly, gzip (and brotli) can be used to compress resources before they are sent to the browser, which reduces the amount of data sent, and hence should mean a site loads faster. The downside is that compressing resources takes time, which could outweigh the gains from the smaller sizes. The ideal solution is to have resources compressed in advance, rather than compressed by the http server in realtime. Most of my websites use wordpress which contains lots of files in plugins, themes etc, so going through all of these and manually compressing them everytime there is an update would be impractical. The answer is to use a script which monitors the system for file changes, and creates compressed files as needed. Below is the script I have recently written to do exactly this.
#!/bin/bash
inotifywait -m -q -e CREATE -e MODIFY -e MOVED_TO -r "/var/www/" --format "%w%f" --excludei '\.(jpg|png|gif|ico|log|sql|zip|gz|pdf|php|swf|ttf|eot|woff|cst|jst|br|cts)$' |
while read file
do
if [[ $file =~ \.(css)$ ]];
then
fname="${file%.*}"
if [ -f "$fname".min.css ]
then
rm -f $file.gz
rm -f $file.br
zopfli --gzip $file
bro --quality 11 --input $file --output $file.br
chmod 664 $file.br
chmod 664 $file.gz
chown wordpress:wordpress $file.br
chown wordpress:wordpress $file.gz
else
rm -f $file.gz
rm -f $file.br
cat $file | cleancss > $fname.cst
cat $file | cleancss | bro --quality 11 --output $file.br
zopfli --gzip $fname.cst -c > $fname.css.gz
chmod 664 $file.br
chmod 664 $file.gz
chown wordpress:wordpress $file.br
chown wordpress:wordpress $file.gz
rm -f $fname.cst
fi
fi
if [[ $file =~ \.(js)$ ]];
then
fname="${file%.*}"
if [ -f "$fname".min.css ]
then
rm -f $file.gz
rm -f $file.br
zopfli --gzip $file
bro --quality 11 --input $file --output $file.br
chmod 664 $file.br
chmod 664 $file.gz
chown wordpress:wordpress $file.br
chown wordpress:wordpress $file.gz
else
rm -f $file.gz
rm -f $file.br
uglifyjs $fname.js > $fname.jst
zopfli --gzip $fname.jst -c > $fname.js.gz
bro --quality 11 --input $fname.jst --output $file.br
chmod 664 $file.br
chmod 664 $file.gz
chown wordpress:wordpress $file.br
chown wordpress:wordpress $file.gz
rm -f $fname.jst
fi
fi
origfs=$(wc -c < "$file")
gzfs=$(wc -c <"$file.gz")
brfs=$(wc -c <"$file.br")
if [ "$origfs" -lt "$gzfs" ];
then
rm $file.gz -f
fi
if [ "$origfs" -lt "$brfs" ];
then
rm $file.br -f
fi
done 

“Hi James I realise it has been a long while, but I just checked this on windows 11 (build 23H2)…”