- Concatenation: I use
catto combine my JS files and CSS files into one file each, so that the browser can issue less HTTP requests when loading the page.
- Compression: I use Closure Compiler to minify my JS and YUI Compressor to minify my CSS, so that those HTTP requests are smaller.
- Cache bust: I append the current timestamp as a query parameter to the JS and CSS in my base template HTML. I serve the files as static files off App Engine which would normally result in browsers caching them forever, but by appending new query parameters for each deploy, I force the browsers to re-download them only when they've changed.
I do all of this in a Makefile, including downloading the necessary tools. You can see the relevant bits in this gist: