Menyinggahkan berkas statis adalah kecepatan yang paling murah yang ada: perambannya tak bertanya sama sekali. Risikonya justru kebalikannya — sebuah lembar gaya yang disinggahkan setahun lalu perlu Anda ubah, di mesin yang tak bisa Anda jangkau.

Aturan yang membuat singgahan panjang jadi aman

Singgahkan dengan agresif HANYA berkas yang namanya ikut berubah ketika isinya berubah. Dengan begitu, sebuah perubahan berarti nama yang baru, singgahan lamanya tak lagi berarti, dan tak ada pengunjung yang pernah memegang berkas yang keliru.

/css/site.a1b2c3.css        <- safe to cache for a year
/css/site.css?v=1788541047   <- the same idea, from the file mtime

Apa yang dipasang

location ~* \.(css|js|woff2|jpg|png|webp|svg)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

location ~* \.(html|php)$ {
    add_header Cache-Control "no-cache";
}

immutable menyuruh peramban untuk bahkan tak repot-repot memeriksa ulang. Sementara no-cache pada HTML tidak berarti "jangan disinggahkan" — ia berarti "tanya aku dulu", dan itu justru tepat untuk halaman yang isinya berubah tanpa alamatnya berubah.

Jangan pernah menyinggahkan berkas bernama tetap untuk waktu yang lama. /css/site.css yang disinggahkan setahun berarti setahun penuh pengunjung yang melihat rancangan lama, dan tak ada satu pun yang bisa Anda lakukan dari pihak Anda untuk memperpendeknya.

Periksa apa yang Anda kirimkan

curl -sI https://yourdomain.com/css/site.css | grep -iE "cache-control|expires|etag"

ETag dan Last-Modified

Keduanya membuat PEMERIKSAANNYA murah, bukan membuat permintaannya tak perlu: perambannya bertanya, servernya menjawab 304 Not Modified, dan tak ada badan yang dikirim. Bagus untuk HTML, dan untuk aset ia pilihan terbaik kedua setelah tidak bertanya sama sekali.

Di belakang CDN, ingatlah bahwa ada dua singgahan. Membersihkan CDN tidak menjangkau peramban yang memegang berkas itu setahun penuh — dan itulah sebabnya namanya harus berubah.