Server  »  Articoli  »  Apache 

Migliorare le prestazioni dei propri siti web

di: Ermanno Ancona     16 Dicembre 2011

Il problema prospettato dal titolo dell'articolo può essere sintetizzato in: minimizzare il tempo che intercorre tra la richiesta di una pagina da parte del visitatore e l'istante in cui tale pagina viene completamente disegnata dal suo browser. Purtroppo alla semplicità di enunciazione non corrisponde un'altrettanto semplice, immediata ed univoca soluzione.

I fattori che contribuiscono a determinare i tempi di risposta sono molti e variabili, basti pensare alle differenze tra un sito che fornisce solo pagine HTML statiche ed uno che fornisce pagine dinamiche, costruite interrogando un database. Nel secondo caso anche le caratteristiche del linguaggio lato server (PHP, ASP, etc.) e del DBMS (MySQL, SQL Server, etc.) sono elementi determinanti, per i quali saranno necessarie specifiche ottimizzazioni. La jungla si infittisce se introduciamo anche considerazioni sulle risorse hardware e la loro configurazione, sulla larghezza di banda e l'ottimizzazione del suo utilizzo.......solo ad elencarle viene il mal di testa!

Di seguito ci limiteremo, si fa per dire, ad analizzare il problema dal punto di vista della struttura di una pagina HTML. È chiaro che le considerazioni fatte avranno valenza generale, costituendo comunque un passo importante nel processo di ottimizzazione. Per nostra fortuna in rete è disponibile una ricca documentazione sull'argomento, in particolare sotto forma di raccolte di regole, le cosiddette best practices. Esse costituiscono una sorta di vademecum da seguire nello sviluppo web, sintetizzando per punti le azioni da intraprendere. Le più famose sono certamente le Web Performance Best Practices di Google e le Best Practices for Speeding Up Your Web Site di Yahoo.

Lo scopo primario di questo articolo è preparare il terreno per la descrizione di un modulo open source per Apache 2: mod_pagespeed . Poiché tale modulo automatizza il processo di ottimizzazione basandosi sulle best practices di Google, queste ultime costituiranno il nostro principale riferimento. In particolare quelle sezioni che più si caratterizzano come azioni "lato server", anche se la linea di demarcazione non è sempre netta data la stretta collaborazione tra amministratore di sistema e programmatore web in quest'ambito.

Sfruttiamo la Cache

Come sappiamo una pagina web moderna è composta, oltre che da codice HTML, da un insieme di altre risorse: immagini, fogli di stile, script, file multimediali ed altro. Ciascuna di esse richiede un certo tempo per il download andando ad incrementare il tempo complessivo di caricamento della pagina. Molti componenti non sono soggetti a modifiche frequenti, per questo i browser possono salvarli localmente nella cosiddetta cache. Dopo la prima visita potranno così utilizzare la copia locale, anziché riprelevare la risorsa dal server. Ciò consente sia di ridurre il peso complessivo della pagina, sia il numero di richieste HTTP inviate al server, fattore molto importante come vedremo meglio più avanti. I principali browser moderni sono dotati di un sistema euristico per decidere quanto tempo mantenere localmente un elemento della pagina prima di considerarlo obsoleto e riscaricarlo.

Per ottenere risultati migliori dobbiamo però configurare il web server perché indichi esplicitamente al browser come comportarsi con una particolare risorsa o tipologie di risorse. La comunicazione può avvenire tramite opportune intestazioni o header HTTP. Essi costituiscono il silenzioso colloquio tra client e server in quanto sono dati effettivamente scambiati, ma non direttamente visualizzati dall'utente. Eccone un esempio, dove risultano evidenziati gli header più rilevanti per le nostre considerazioni:

Vary: Accept-Language,Cookie,Referer
Content-Type: text/html; charset=UTF-8
Etag: "ddb0427dab362d9fe748aceb32decdf2"
Last-Modified: Sat, 12 Nov 2011 16:42:05 GMT
Date: Sat, 12 Nov 2011 16:42:05 GMT
Expires: Sat, 12 Nov 2011 17:42:05 GMT
Cache-Control: public, max-age=3600
X-Content-Type-Options: nosniff
Content-Encoding: gzip
Server: codesite_static_content
Content-Length: 4870

Il protocollo HTTP/1.1 prevede due tipologie di intestazioni, Expires e Cache-Control, tra loro analoghe. La prima specifica una data assoluta di "scadenza" della risorsa, nell'esempio Sat, 12 Nov 2011 17:42:05 GMT. La seconda, tramite l'opzione max-age=<secondi>, fornisce invece il numero di secondi, a partire dal momento della richiesta, per cui la risorsa potrà considerarsi "fresca". Nell'esempio sono 3600 secondi, ovvero un'ora.

Vediamo come usarle con esempi pratici.

Guide Server

Guida risparmio energetico per server

Dalla determinazione dei consumi al risparmio, dalla...

Guida Subversion

SVN è uno dei sistemi per il versioning più utilizzati al mondo....

Guida Application server

Cosa sono, quali sono e come possono essere utilizzati nella...

Altre guide

Newsletter

Ogni settimana, in due distinte newsletter: notizie a approfondimenti su Apache e IIS.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Amministratore di Reti Windows Server 2008

11 Giugno 2012 a Milano
Disponibilità: 5 Posti

Nessun corso previsto