Usare il Server Cache Control per migliorare le performance

La memorizzazione nella cache è la storicizzazione temporanea di dati ad accesso frequente in supporti a velocità più elevate (in genere SRAM o RAM) per il recupero più efficiente.

In questo articolo viene illustrato come configurare il server per la memorizzazione nella cache di tutte quelle risorse caricate più di frequente al fine di rendere più efficiente il sito e per risparmiare larghezza di banda.
Grafica e multimedia in genere non cambiano con la frequenza dei file HTML.

Elementi grafici che raramente cambiano, come loghi, intestazioni possono essere settati con intervalli di scadenza più lunghi, mentre le risorse che cambiano più spesso come file XHTML e XML con intervalli di scadenza più brevi.

Esistono almeno tre modi per gestire il caching:

1 – Via tags ()
2 – Settando gli HTTP headers (CGI scripts etc.)
3 – Attraverso la configurazione del Web Server (httpd.conf)

In questo articolo ci concentreremo sulla terza modalità.

Per Apache i moduli mod_expires e mod_headers gestiscono il controllo cache tramite intestazioni HTTP inviate dal server.
Dal momento che tali moduli non sono installati di default è necessario attivarli attraverso la creazione dei soft link nella cartella mod_enable:

ln -s ../mods_available/expire.load expire.load
ln -s ../mods_available/headers.load headers.load

Un modo rapido per abilitare le intestazioni di controllo della cache per i siti esistenti è quello di selezionare file per estensione.
Anche se questo metodo ha alcuni svantaggi (in particolare l’obbligo della presenza delle estensioni sui file), ha il pregio della semplicità.

Per attivare mod_expires impostare la direttiva ExpireActive su On

Esempio:

ExpiresActive On

<Directory “/home/website/public_html”>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    Allow from all
    ExpiresDefault A300
    <FilesMatch “\.html$”>
        Expires A86400
    </FilesMatch>
    <FilesMatch “\.(gif|jpg|png|js|css)$”>
        Expires A2592000
    </FilesMatch>
</Directory>

A300 imposta il tempo di scadenza predefinita a 300 secondi dopo l’accesso. Utilizzando M300 viene impostato il tempo di scadenza a 300 secondi dopo la modifica del file.
Il primo segmento FilesMatch imposta l’intestazione Cache-Control per tutti i file html a 86400 secondi (1 giorno).
La seconda sezione FilesMatch definisce l’intestazione Cache-Control per tutte le immagini, JavaScript e file CSS esterni a 2592000 secondi (30 giorni).

Selezione dei Files tramite il MIME Type

Lo svantaggio del metodo utilizzato sopra è l’obbligatoria presenza delle estensioni sui files.
Un metodo migliore è quello di usare il comando ExpiresByType del modulo mod_expires. Come suggerisce il nome, il comando ExpiresByType permette una definizione delle risorse da cachare tramite il tipo MIME:

ExpiresActive On
ExpiresDefault “access plus 300 seconds”

<Directory “/home/website/public_html”>
   Options FollowSymLinks MultiViews
   AllowOverride All
   Order allow,deny
   Allow from all
   ExpiresByType text/html “access plus 1 day”
   ExpiresByType text/css “access plus 1 day”
   ExpiresByType text/javascript “access plus 1 day”
   ExpiresByType image/gif “access plus 1 month”
   ExpiresByType image/jpg “access plus 1 month”
   ExpiresByType image/png “access plus 1 month”
   ExpiresByType application/x-shockwave-flash “access plus 1 day”
</Directory>

Questo codice imposta gli stessi parametri, ma in modo più flessibile e leggibile.
Per i comandi di scadenza è possibile utilizzare “access” o “modified“, a seconda se si desidera iniziare a contare dal momento dell’ultimo accesso al file, o dall’ultima volta che è stato modificato.

Nel nostro caso, ho scelto di usare offset di accesso brevi per i file di testo che possono cambiare e offset di accesso più lunghi per la modifica delle immagini di rado.

Conclusione

Server Cache Control può migliorare le prestazioni del tuo sito, riducendo i costi di banda. Con il caching degli oggetti che cambiano di rado per periodi più lunghi, e la memorizzazione nella cache dei contenuti aggiornati di frequente per periodi più brevi (o per niente), è possibile accelerare i tempi di caricamento percepiti, pur mantenendo i contenuti aggiornati.

No comments yet. You should be kind and add one!

Leave a Comment

*

Allowed tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>