Joomlashow arrow Articoli arrow Migliorare la velocità di caricamento di Joomla 1.5

Migliorare la velocità di caricamento di Joomla 1.5

22-12-2009 10:09

scritto da Federico Capoano

La performance di un sito web è un fattore importante che in alcuni casi, se trascurato, può rallentare sensibilmente la crescita di un sito o un attività sul web.

Chiunque abbia un pò di dimestichezza con PHP e MySQL sa che un CMS come Joomla può peccare se si parla di velocità di caricamento o performance.

Inoltre tutti i web designer esperti di xHTML, CSS, Javascript e grafica sanno che moltissimi template per Joomla non tengono sufficientemente in considerazione le best practices volte ad ottenere delle performance decenti.

Joomla Snail vs Joomla Ghepard: The choice it's Yours.

Snail Vector by ekamanganese on Devian Art

Dato che l'ottimizzazione delle performance richiede conoscenze tecniche approfondite ed elevata attenzione per i dettagli è una pratica di rifinitura che può essere eseguita solo da quei pochi eletti che, armati di pazienza e buona volontà, vogliono ottenere il massimo dal proprio sito web.

Contenuti presenti in questo articolo

Dinamica del caricamento di un sito Joomla

Joomla effettua diverse query complesse al database ad ogni caricamento di pagina, questo significa che quante più sono le estensioni attive tanto più il numero delle query aumenterà. Spieghiamo questo concetto con uno schema.

Visitatore ->
    richiesta http ->
        Joomla - il codice php fa al database le seguenti domande:
            quali sono i plugin attivi per questa pagina?
            forniscimi le informazioni dei plugin attivi.
            qual'è il contenuto di questa pagina?
            nel caso il contenuto fosse quello di un componente, forniscimi le informazioni sul componente.
            quali sono i moduli attivi per questa pagina?
            forniscimi le informazioni di ogni modulo attivo.
            qual'è il template attivo per questa pagina?
            l'utente è loggato? Se sì, forniscimi il suo username.
            
            <- MySQL elabora le richieste e restituisce i dati
    <- Joomla elabora i dati forniti da MySQL e restituisce i dati all'utente sotto forma di pagina HTML
L'utente scarica la pagina HTML, il css, le immagini e le eventuali istruzioni javascript
 

Questo schema è una semplificazione delle richieste più importanti che avvengono durante il caricamento.

Ipotizziamo di avere una situazione in cui il discorso performance sia stato perso di vista, immaginiamo quindi un sito in cui vengano caricate molte estensioni diverse che recuperano informazioni dal database. Immaginiamo che il template del sito non sia ottimizzato e di avere qualcosa come 50 utenti attivi nello stesso momento. Ciò significherebbe la ripetizione di quello schema, moltiplicato per 50 volte, eseguito ad ogni caricamento di pagina. Il risultato?
Nei casi migliori un rallentamento sensibile della velocità di caricamento del sito, nei casi peggiori un crash del server.

Il numero delle query al database MySQL non è solo l'unico fattore che gioca un ruolo importante nella determinazione delle performance generali di un sito realizzato con Joomla, ci sono molti altri fattori da tenere in considerazione.

Vediamo quali sono i fattori più importanti su cui concentrarsi per migliorare sensibilmente la velocità di caricamento di un sito basato su Joomla 1.5.

Molti dei consigli di seguito descritti sono adatti a qualsiasi altro CMS o metodo di sviluppo di siti web.

La necessità di un background tecnico adeguato rende questo articolo di difficile lettura per coloro che sono alle prime armi con i siti web e Joomla.

Ottimizzare il template

Il template è la base di partenza dell'ottimizzazione, questo vale universalmente per ogni sito web, a prescindere che si utilizzi Joomla, Drupal, altri CMS, framework o altri metodi.
I consigli presentati in questa parte sono particolarmente utili per chi sviluppa personalmente i template per i siti che realizza.

Qualità del codice (x)HTML

I template scritti con codice snello, pulito, semplice e chiaro dal punto di vista semantico permettono di tenere basso il peso delle pagine HTML generate da Joomla.
Questo non solo determinerà una velocità di caricamento maggiore ma, secondo il principio "Quantità di testo VS quantità di codice HTML" aiuterà anche il processo di ottimizzazione per i motori di ricerca.

Ridurre al minimo le richieste HTTP per le immagini caricate via css

Ogni immagine contenuta in un template viene scaricata singolarmente tramite una richiesta HTTP. Ogni richiesta HTTP viene inviata al server, quest'ultimo impiega un certo numero di millisecondi per rispondere ad ogni richiesta.
Di conseguenza quante più immagini verranno richieste tanto più alto sarà il numero delle richieste HTTP da soddisfare. Considerando che ogni richiesta HTTP viene effettuata in successione una dopo l'altra e che ognuna ha bisogno di qualcosa tra gli 80 e i 250 millisecondi per ricevere in risposta l'immagine da scaricare, il risultato può non essere dei migliori se le immagini, quindi le richieste HTTP, sono molto numerose.
Sebbene il metodo migliore per ottenere delle performance ottimali sia quello di utilizzare poche immagini, possiamo studiare metodi per ottenere un buon compromesso tra elaborazione del design e performance.

Una soluzione tecnica d'aiuto: gli Sprite CSS

La celebre tecnica degli Sprite consiste nel raggruppare il maggior numero possibile di immagini in un solo file, JPEG o PNG.

Cache: Mai

Solitamente un design complesso non permette di raggruppare tutte le immagini in una sola JPEG o una sola PNG a causa di esigenze diverse dei formati.
Per ovviare al problema si possono raggruppare le immagini in alcuni sottogruppi, ad esempio un gruppo potrebbe essere costituito da un file JPEG, un altro da un file PNG-8 non trasparente ed un altro ancora da una PNG-32 con trasparenza.

Il risultato finale dipende dalla complessità del design ma in genere cercando di raggruppare il maggior numero possibile di immagini nel minor numero di file si ottengono degli ottimi risultati.

Peso delle immagini

Tenere d'occhio il peso delle immagini è un'altra buona abitudine da considerare per ottenere un tempo di caricamento decente. Questo non riguarda solamente le immagini del template, ma tutte le immagini presenti sul nostro sito.
Le immagini JPEG e PNG possono essere ottimizzate facilmente con Adobe Photoshop o Adobe Fireworks.

Segnalo alcuni strumenti e risorse esterne per approfondire il tema:

  • PunyPNG - strumento che permette di ottimizzare le immagini PNG direttamente online senza sforzo.
  • PNG Crush - strumento per l'ottimizzazione delle immagini PNG da scaricare ed utilizzare via command line.
  • Jpeg Library - strumento per l'ottimizzazione di immagini JPEG da scaricare ed utilizzare via command line.
  • Clever PNG Optimization Techniques - articolo che illustra alcune tecniche manuali per l'ottimizzazione di immagini PNG.
  • Clever JPEG Optimization Techniques - articolo che illustra alcune tecniche manuali per l'ottimizzazione di immagini JPEG.

Ridurre il numero delle richieste HTTP per css e javascript

Lo stesso discorso fatto per le immagini vale per qualsiasi altro file esterno, css e javascript. Purtroppo il discorso può farsi complicato, vediamone i motivi:

  • alcuni sviluppatori tendono a tenere le diverse parti del css del template separate in diversi file.
  • in genere molte estensioni di terze parti utilizzano file css e javascript indipendenti, molte volte questi file vengono caricati inutilmente anche quando l'estensione non viene utilizzata.

In alcuni casi intervenire manualmente per raggruppare i file css e javascript non è una cattiva idea, ma fortunatamente esistono delle estensioni che fanno questo automaticamente per noi e che vedremo più avanti nell'articolo.

Peso del file css

Se sviluppate i vostri template personalmente, potete utilizzare alcuni accorgimenti in fase di sviluppo per risparmiare bytes nel css grazie all'uso di CSS shorthands, ovvero scorciatoie CSS.

Ad esempio, il seguente snippet:

 
.elemento{
    margin-top: 5px;
    margin-right: 10px;
    margin-bottom: 5px;
    margin-left: 10px;
}
 
.sfondo{
    background-color: #FFFFFF;
    background-image: url(../images/immagine.png)
    background-repeat: no-repeat
    background-position: 0 0;
    background-attachment: scroll
}

può essere riassunto in due sole righe:

 
.elemento { margin: 5px 10px }
.sfondo { background: #FFF url(../images/immagine.png) no-repeat scroll 0 0 }

Potremmo risparmiare ulteriore spazio comprimendo il file, eliminando spazi superflui, punti e virgola finali e tenendo tutto il codice su una riga, ma così facendo il codice diverrebbe illegibile e renderemmo il nostro lavoro di manutenzione un incubo.
Fortunatamente le esensioni a cui ho accennato poco fa svolgono anche il compito di comprimere il file css automaticamente senza modificare il file originale.

Peso e complessità dei file Javascript

L'uso di javascript per il miglioramento della "user experience" sul nostro sito è un'ottima pratica, ma l'esagerazione porta sempre a degli squilibri.
Per questo vi consiglio di non esagerare con l'utilizzo di plugin ed estensioni che hanno il solo scopo di sfoggiare effetti grafici e transizioni di dubbia utilità.
Inoltre script complessi che richiedono un'uso di memoria consistente da parte del rendering engine del browser possono determinare un rallentamento sensibile del caricamento delle pagine.

Utilizzare strumenti come Javascript compressor per ridurre il peso dei vostri file javascript è una buona idea.
In questo caso vi consiglio di salvare la versione compressa del vostro javascript in un file separato e tenere l'originale intatto per eventuali manutenzioni.

Spostare i file Javascript in fondo al codice html

È risaputo che durante il caricamento del codice javascript, il browser non esegue altri download e non prosegue con il rendering della pagina. Questo significa che nel caso il codice javascript inserito nel tag <head> abbia una peso non indifferente (ad esempio la libreria mootools o lo script di Google Analytics) il browser non procederà nel caricamento del resto della pagina finchè il codice javascript non sarà scaricato completamente.
Per evitare questo inconveniente basta spostare le istruzioni che caricano i file javascript in fondo alla pagina, laddove possibile.

Per approfondire questo argomento consiglio la lettura dell'articolo: High Performance Web Sites: Rule 6 – Move Scripts to the Bottom

Disabilitare mootools.js e caption.js laddove non servono

no mootools

Caricare la libreria mootools e lo script caption.js in tutte le pagine del sito è un inutile spreco di risorse e perdita di tempo.

Nell'articolo "Disabilitare Mootools e caption.js dal frontend di Joomla 1.5" ho illustrato due semplici tecniche che permettono di disattivare questi due script dove non servono.

Accorgimenti nella configurazione di Joomla

Lavorando sulla configurazione di Joomla e dei singole estensioni base si possono ottenere dei miglioramenti nella velocità di caricamento notevoli.

Attivare la compressione GZIP

GZip è un metodo di compressione open source molto efficace supportato dalla maggior parte dei piani di hosting linux. Utilizzando Gzip possiamo ridurre drasticamente (in media tra il 70% e il 90%) il peso delle pagine HTML generate da Joomla.

Attivare la compressione GZip in Joomla è semplicissimo, basta aprire la "Configurazione globale" del nostro sito alla scheda "Server" e settare la voce "Compressione Pagine GZip" a "Sì" e salvere le modifiche.

Compressione pagine Gzip: Sì - No

Dopo aver salvato le modifiche testate il vostro sito per controllare che la compressione GZIP sia correttamente supportata e tutto funzioni correttamente.

Nel caso riceviate un errore di codifica è molto probabile che il "mod_deflate" o il "mod_gzip" non siano attivi sul vostro server.
Se gestite un server dedicato o un VPS verificate le impostazioni del vostro server apache ed assicuratevi che il mod_deflate sia correttamente installato e attivato.

Se il vostro sito è ospitato su uno shared hosting contattate il vostro fornitore chiedendo spiegazioni.

Per testare velocemente e senza sforzo l'efficacia della compressione Gzip sul vostro sito potete utilizzare Gzip Test Tool: non dovrete fare altro che inserire l'URL del vostro sito e far partire il test.

Rimarrete stupiti dal rapporto di compressione, osservate il risultato del test fatto su Joomlashow:

simple web page compression / delate / gzip test tool

L'utilizzo della compressione Gzip determinerà un uso maggiore di risorse da parte del processore del server.

Sui piani d'hosting non particolarmente performanti l'uso di questa funzionalità potrebbe risultare controproducente in quanto i server potrebbero non sopportare l'uso extra di risorse.
Questa possibilità può essere facilmente prevenuta se si seguiranno gli altri accorgimenti riguardanti l'attivazione della cache di Joomla, l'utilizzo del componente Query Cache e la limitazione dei moduli e plugin attivi.

Attivare la cache di Joomla

L'attivazione della cache di Joomla è un'operazione facile e permette di ridurre drasticamente l'uso di risorse del server.

Per attivare la cache di Joomla aprite la "Configurazione Globale" del vostro sito e alla cartella "Sistema" impostate la voce "Cache" a "Sì".

La voce "Tempo cache" indica la validità della cache e solitamente può essere settata tra i 15 e i 60 minuti, questo fattore dipende anche dalla frequenza con cui i contenuti del vostro sito cambiano. Maggiore è la frequenza di aggiornamento e cambiamento dei contenuti e minore dovrà essere il tempo di validità della cache.

Configurazione Cache

A livello tecnico, la Cache di Joomla agisce effettuando il caching degli oggetti recuperati dal database, che possono essere moduli, contenuti, risultati di funzioni e così via. Questo concetto è utile per capire la differenza tra questo tipo di cache ed il plugin "Page Cache" spiegato di seguito.

Il plugin "Page Cache", cos'è e come attivarlo

Il plugin "Page Cache" o anche solo "Cache" è presente in tutte le installazioni default di Joomla 1.5 e agisce effettuando il caching delle pagine generate da Joomla.
Appartiene alla categoria System e può essere gestito ed attivato andando in "Estensioni > Gestione Plugin > System - Cache".

Plugins: System - Cache

Se i file statici del vostro sito non cambiano con molta frequenza potete attivare l'opzione "Utilizza Browser Caching" e settare la "Durata vita Cache" tra i 15 e i 60 minuti.

Utilizza Browser Caching - Durata Vita Cache

La funzionalità di questo plugin è molto potente, ma attualmente in Joomla 1.5 è abbastanza limitata in quanto non c'è modo di specificare quali pagine devono essere cachate e quali no.
Il mio consiglio è quello di testare il plugin insistentemente.

Qualora vi accorgiate di non aver bisogno che un particolare modulo venga cachato da "Page Cache" provate ad aprire la sua configurazione in "Estensioni > Gestione moduli" e cercate un opzione che permetta di disabilitare il caching, solitamente il parametro è chiamato "Caching" o "Cache" e il valore da settare è "Never" o "Mai".

Cache: Mai

L'utilizzo di questo plugin in combinazione con la Cache globale di Joomla può fare una differenza notevole nel miglioramento della velocità di caricamento di Joomla 1.5.

Limitare moduli e plugin attivi

Considerando che Joomla impiega del tempo (seppur minimo) per determinare quali plugin / moduli sono attivi in ogni pagina e che per recuperare i loro parametri, disattivare i moduli ed i plugin che non sono strettamente necessari è un'ottima pratica.

Controllate le pagine "Gestione Moduli" e "Gestione Plugin" nel backend del vostro sito e disattivate i plugin che non sono strettamente necessari.
Se avete installato delle estensioni che non utilizziate più, rimuovetele.

Fate seguire queste operazioni da un testing adeguato, potrebbe sempre succedere di disabilitare plugin che svolgono ruoli importanti che dovranno essere riabilitati.

Accorgimenti riguardanti estensioni di terze parti

Dopo aver lavorato sulla configurazione e le impostazioni di base di Joomla è bene analizzare l'impatto sulle performance di estensioni di terze parti installate (o eventualmente da installare) sui vostri siti.

Scegliere con parsimonia le estensioni da utilizzare

Devo rivelare un dettaglio spinoso riguardo le estensioni di terze parti per Joomla: dopo un analisi al codice della maggior parte delle estensioni che ho utilizzato sono rimasto deluso dalla loro scarsa qualità e la loro scarsa (se non nulla) considerazione di principi quali accessibilità, performance, pulizia del codice e aderenza al modello MVC di Joomla 1.5.

Purtroppo la maggior parte delle estensioni vengono disegnate per soddisfare determinate necessità funzionali, per essere facili da installare ed utilizzare, dimenticando spesso tutto il resto.

Questo a mio avviso è un problema gravissimo ed è il motivo per cui moltissimi sviluppatori e web designer passano poi ad altri CMS e altri metodi per realizzare siti web.

"Non è tutto oro ciò che brilla", "l'apparenza inganna" e sebbene un'estensione possa sembrare perfettamente funzionante al momento dell'installazione, della configurazione e del testing iniziale, le aspettative dei perfezionisti sono destinate a rimanere deluse in moltissimi casi.

A mio avviso, i problemi più gravi che si possono incontrare sono i seguenti:

  • troppe query MySQL
  • codice ridondante
  • funzionalità di dubbia utilità che consumano troppe risorse del server
  • uso massiccio di file javascript non compressi a volte divisi in più files (aumentando così le richieste HTTP) che in alcuni casi vengono caricati anche nelle pagine in cui l'estensione non è attiva
  • uso di CSS ed immagini non ottimizzate
  • inaderenza al pattern MVC con il conseguente aumento di difficoltà delle modifiche tecniche

Per tutti questi motivi vi consiglio di scegliere con cura le estensioni che volete utilizzare.

Installatele, testatele ed analizzatene il codice prima di cominciarle ad usare in ambiente di produzione.
Troppe cattive estensioni possono distruggere il vostro lavoro di ottimizzazione e rallentare sensibilmente il vostro sito.

Evitare Bridge tra Joomla e altri CMS

Solitamente gli script o i CMS che vengono integrati tramite bridge in Joomla sono sistemi indipendenti dotati di un framework, un database, una gestione degli utenti ed un template proprio.

Nella maggior parte dei casi l'utilizzo di un bridge determina una penalizzazione nelle performance rispetto ad una soluzione integrata con Joomla.

Evitare sistemi di statistiche in PHP e MYSQL

I sistemi di statistiche in PHP e MySQL possono aumentare spropositatamente l'uso di risorse della CPU del server e il numero delle query al database MySQL.

L'utilizzo di sistemi di statistiche che analizzano il log del server sono meno invasivi e più indicati per chi non ha esigenze di monitorazione troppo impegnative.
In alternativa c'è Google Analytics.

SEF: testing e caching necessari

La riscrittura delle URL o SEF URL è una funzionalità essenziale per migliorare l'accessibilità ed il ranking SEO di un sito Joomla.

Il SEF di base di Joomla è notevole, impostando il parametro "Utilizza mod_rewrite" su "No" si possono ottenere dei buoni risultati con un gran risparmio di risorse del Server, ma per molti (me compreso) le URL generate non sono abbastanza belle e non si ha un controllo sufficiente su di esse.

I componenti di terze parti come sh404SEF o Artio JoomSEF sono dotati di caching interno che permette di ridurre sensibilmente il numero delle query al database MySQL e l'uso di risorse del server.

Inoltre le configurazioni di questi componenti contengono delle spiegazioni su alcune funzionalità che se attive possono rallentare il caricamento del sito. Vi consiglio di analizzare attentamente la configurazione del vostro componente, testarla insistentemente e ricercare la miglior combinazione che faccia al caso vostro.

Estensioni aggiuntive che aiutano a migliorare le performance

Alcune estensioni aggiuntive possono aiutarci nell'ottimizzare la velocità di caricamento di Joomla 1.5.

CssJsCompress (e alternative)

Il plugin CssJsCompress è abbastanza semplice da usare e dispone di alcune funzionalità molto interessanti:

  • Aggregazione dei file CSS esterni in un unico file
  • Compressione codice CSS (eliminazione spazi, punti e virgola finali, ecc.)
  • Compressione Gzip del file CSS generato
  • Aggregazione file Javascript esterni
  • Compressione Gzip del file Javascript generato
  • Caching dei risultati generati

Un uso corretto di questo plugin può avere come risultato una drastica diminuzione della banda utilizzata dal server e una diminuzione del tempo necessario al caricamento delle pagine dovuto ad una diminuzione notevole del peso di file CSS e Javascript.

Per ottenere un buon risultato è necesario testare il plugin escludendo eventuali file javascript o css che non devono essere aggregati, ad esempio potreste non volere che la libreria di Google Analytics venga aggregata con il file javascript del vostro template.

Esistono anche diverse alternative, a mio parere, al momento in cui sto scrivendo questo articolo, le due migliori sono:

Query Cache

Query Cache è un componente sviluppato da Anthony Ferrara, uno dei coordinatori del team di sviluppo di Joomla, particolarmente esperto in materia di ottimizzazione delle performance di Joomla.

Questo componente effettua il caching delle query che vengono fatte al database MySQL contribuendo a diminuire l'uso di risorse della CPU e del database MySQL.
Al momento in cui scrivo questa guida il componente è in fase di "Release Candidate" ed un uso scorretto può danneggiare il vostro sito. Per questo motivo vi consiglio di effettuare un backup prima di installarlo.

IL COMPONENTE QUERY CACHE NON FUNZIONA CON IL LEGACY MODE ATTIVO. SE INSTALLATE IL COMPONENTE CON IL LEGACY MODE ATTIVATO IL VOSTRO SITO SARÀ DANNEGGIATO.

Per installare e configurare correttamente il componente seguite queste istruzioni:

  1. per prima cosa scaricate il componente dalla pagina Downloads del sito JoomlaPerformance.
  2. Assicuratevi che la directory "/libraries/joomla/database/database/" risiedente sul vostro server sia scrivibile.
  3. Installate il componente da "Estensioni > Installazione estensioni"
  4. Aprite la configurazione del componente da "Componenti > Query Cache > Config"
  5. Cambiate l'opzione "Backend" da "none" a quella che volete utilizzare, le opzioni non disponibili saranno grige e non selezionabili.
  6. Se utilizzate Memcached, inserite l'indirizzo IP del server e la porta.
  7. Salvate le modifiche.
  8. Aprite la configurazione globale di Joomla alla sezione "Server" e cambiate "Tipo Database" immettendo "mysql_cached" oppure "mysqli_cached", quindi salvate le modifche.
  9. Assicuratevi che la cartella "components/com_qcache/cache" sia scrivibile.

Dopo aver seguito queste istruzioni ed aver testato il sito dovreste notare la comparsa di diversi file nella cartella "components/com_qcache/cache".

OptimizeTables: ottimizzare le tabelle MySQL

Ottimizzare le tabelle MySQL periodicamente può aiutare a migliorare le performance per i siti contenenti un gran numero di contenuti e record nel database.

L'operazione può essere effettuata manualmente via phpMyAdmin, oppure può essere svolta automaticamente dal plugin OptimizeTables.

Magie con .htaccess

E' possibile ottimizzare le performance di Joomla 1.5 (e di qualsiasi altro sito web ospitato su un server linux / apache che permetta l'uso di file .htaccess) attraverso alcune semplici istruzioni da inserire nel vostro file .htaccess.

Queste istruzioni potrebbero non funzionare sui server dove i moduli "mod_expires" e "mod_header" di apache non sono installati o attivati.

 
# Prevenire Image Hot Linking
# Cambiare ilvostrosito\.com con la vostra URL reale, mantenendo il backslash \, ad esempio !joomlashow\.it
RewriteCond %{REQUEST_FILENAME}  .(gif|jpe?g|png)$  [NC]
RewriteCond  %{HTTP_REFERER}  !^$
RewriteCond  %{HTTP_REFERER}  !ilvostrosito.com   [NC]
RewriteCond  %{HTTP_REFERER}  !bloglines.com   [NC]
RewriteCond  %{HTTP_REFERER}  !google.   [NC]
RewriteCond  %{HTTP_REFERER}  !yahoo.   [NC]
RewriteCond  %{HTTP_REFERER}  !search?q=cache   [NC]
RewriteRule  (.*)   http://127.0.0.1   [R,NC,L]
 
# Settare gli Expires headers e cache control
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault A600
  ExpiresByType image/x-icon A2592000
  ExpiresByType application/x-javascript A604800
  ExpiresByType text/css A604800
  ExpiresByType image/gif A2592000
  ExpiresByType image/png A2592000
  ExpiresByType image/x-icon A2592000
  ExpiresByType image/jpeg A2592000
  ExpiresByType image/jpg A2592000
  ExpiresByType image/jpeg A2592000
  ExpiresByType text/plain A86400
  ExpiresByType application/x-shockwave-flash A2592000
  ExpiresByType video/x-flv A2592000
  ExpiresByType application/pdf A2592000
  ExpiresByType text/html A600
 
  <filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
    Header unset Last-Modified
  </filesMatch>
  <filesMatch "\\.(css)$">
    Header set Cache-Control "max-age=604800, public"
    Header unset Last-Modified
  </filesMatch>
  <filesMatch "\\.(js)$">
    Header set Cache-Control "max-age=216000, private"
    Header unset Last-Modified
  </filesMatch>
  <filesMatch "\\.(xml|txt)$">
    Header set Cache-Control "max-age=216000, public, must-revalidate"
  </filesMatch>
  <filesMatch "\\.(html|htm|php)$">
    Header set Cache-Control "max-age=1, private, must-revalidate"
  </filesMatch>
 
    # Disattivare ETags
  Header unset ETag
</IfModule>
 
# Disattivare gli ETags
FileETag none

Vediamo velocemente e sinteticamente il significato di queste righe di codice.

Prevenire l' "image hotlinking"

Queste istruzioni fanno in modo che le immagini risiedenti sul vostro sito non possano essere caricate da altri siti attraverso il tag html <img>, proteggendo così la banda del vostro server da inutili sprechi. Le istruzioni ammettono qualche eccezione in caso di alcuni motori di ricerca.

Per far funzionare correttamente queste istruzioni dovete cambiare la stringa "ilvostrosito\.com" con la vostra URL reale, mantenendo il backslash \, ad esempio !joomlashow\.it nel caso di www.joomlashow.it.

Per approfondire questo tema consiglio la lettura dell'articolo Preventing image hotlinking: an improved tutorial

Settare "Expires Header", "Cache-control"

Queste istruzioni aiutano a rendere la comunicazione tra il server e la cache del browser più esplicita ed efficace per cui un visitatore che ha già visualizzato e scaricato i file del sito (css, javascript, immagini, ecc.) non invierà nessuna richiesta http al server ma recupererà i file direttamente dalla cache del browser.

Per approfondire questo tema consiglio la lettura dell'articolo Speed up sites with htaccess caching.

Disattivare gli ETags

Gli ETags sono stati disegnati per controllare se i file nella cache del browser coincidono con quelli presenti sul server.

Secondo Yahoo gli ETags non funzionano come dovrebbero a causa di differenze di implementazione tra i server e perciò ne consiglia la disattivazione.

Per approfondire questo tema consiglio la lettura dell'articolo Best Practices for Speeding Up Your Web Site: Configure ETags e Speed Tips: Turn Off ETags

Analizzare i risultati dell'ottimizzazione

Nonostante mettendo in pratica i suggerimenti illustrati in questo articolo si dovrebbero notare ad occhio dei netti miglioramenti nella velocità di caricamento di Joomla, esistono diversi strumenti di misura delle performance che possono aiutarvi ad effettuare un'analisi tecnica più dettagliata.

I due strumenti più celebri sono YSlow e Google Page Speed, entrambi disponibili come estensioni aggiuntive di Firefox.

Conclusione

Bisogna ammettere che dopo un lavoro di rifinitura così impegnativo, ricevere come premio una "A" da YSlow è una bella ricompensa.

YSlow Grade A overall performance score

Nemesis DesignFederico Capoano è un freelance web designer / web developer proveniente da Roma che attualmente vive in Spagna, nelle Isole Baleari. Ideatore e fondatore di Joomlashow.it, gestisce una piccola impresa individuale che offre servizi di web design e web development conosciuta come "Nemesis Design".

Puoi tenerti aggiornato su nuovi articoli e tips & tricks su Joomla seguendolo su Twitter.

Commenti utenti  

Visualizza 20 di 20 commenti

Info sulla cache da abiliatre o no

Complimenti per l'ottimo articolo, ho già messo in pratica diverse cose e ora devo studiarmelo bene per vedere altri accorgimenti. 
Avrei una domanda: considerando che il sito è poco aggiornato ossia vengono inseriti uno o due articolo al mese e il resto rimae invariato è giusto abilitare tuttii i tipi di cache di cui parli (sia da configurazione genrale che il plugin) e impostarlo a 60 minuti? 
Grazie mille 
 
stefano

Scritto da: stefano riga75 (Guest) 22-12-2009 23:35

RE: Info sulla cache da abiliatre o no

Se hai un sito i cui contenuti cambiano di rado puoi impostare la cache a 60 minuti, o anche molto di più se vuoi, 360 minuti (6 ore) o se proprio vuoi azzardare 1440 (24 ore). 
Ti bastera fare un pò di testing per vedere se tutto va bene e in caso noti qualche stranezza abbassi il numero.

Scritto da: nemesis (Membro) 23-12-2009 10:27

Plugin Cache

Grazie mille, l'unica cosa è che se attivo il plugin della cache con ie8 da qualche problema ossia alcune volte non visualizza le immagini e non capisco il perchè, mentre con firefox, safari si vedono tutte.....Boh a questo punto ho disattivato il plugin e ho mantenuto attiva la cache abilitata dalla configurazione generale e funziona il tutto perfettamente. 
 
Stefano

Scritto da: stefano riga75 (Guest) 23-12-2009 18:26

RE: Plugin Cache

davvero strano.. 
Poco tempo fa un amico aveva un problema con IE7 e 8 che non visualizzavano un immagine perchè utilizzava lo schema di colori CYMK invece che RGB. 
Credo che se cerchi info su Google o sul forum di supporto ufficiale di Joomla troverai più info in caso sia un problema ricorrente. 
 
Buone feste!

Scritto da: nemesis (Membro) 24-12-2009 11:39

Altro problema con la cache abilitata

Ho scoperto che se uno compila il form (uso Chronoform) con la cache abilitata non funziona mentre se la disabilito ritorna a funzionare e a mandare le email...moooolto strano

Scritto da: stefano riga75 (Guest) 27-12-2009 13:46

RE: Altro problema con la cache abilitat

Di quale cache parli? 
La cache della configurazione globale o il plugin page cache? 
Hai provato a ricercare informazioni su Google? Magari è un problema conosciuto e ci sono soluzioni fornite dagli sviluppatori. 
 
Da una parte gli svlippuatori devono assicurarsi che i loro componenti funzionino correttamente con la cache abilitata, dall'altra Joomla dovrebbe permettere di far scegliere agli amministratori le parti del sito da escludere dal caching del plugin page cache.

Scritto da: nemesis (Guest) 29-12-2009 09:37

consiglio, aiuto

permettimi una domanda ma i js Mootools e caption posso metterli in fondo o potrebbero verificarsi dei problemi? 
Grazie 
 
P.S: Con i tuoi consigli, aiuti sono arrivato a Grade A con YSlow....grazie mille 
 
stefano

Scritto da: stefano (Guest) 02-02-2010 10:25

RE: consiglio, aiuto

Ciao Stefano, 
sono contento che hai ottenuto dei buoni risultati con questa guida. 
In teoria non dovresti avere nessun problema mettendo Mootools e caption in fondo al codice. 
In pratica però, non essendo un guru di javascript non saprei dirti se ci possano essere dei casi particolari in cui ci sono dei problemi - questo dipende anche da che uso fai di javascript nel tuo sito, se ti limiti all'uso di default non ci dovrebbero essere problemi, però come sempre fai un testing adeguato. 
Ti consiglio di scaricare l'ultima versione compressa di mootools e di utilizzare quella per risparmiare qualche decina di KB.

Scritto da: nemesis (Membro) 02-02-2010 10:35

Mootools

Scusa la domanda io ora ho la versione 1.11 e ho visto che è uscita la versione 1.24 ma basta che scarico e sovrascrivo la versione ed è tutto compatibile o no? 
Grazie 
 
stefano

Scritto da: Stefano (Guest) 13-02-2010 10:45

RE: Mootools

Mm, forse mi rimangio quello che ho detto, leggi qui: Mootools Library Upgade 12

Scritto da: nemesis (Membro) 13-02-2010 12:41

http://www.stefanorigazio.net

Scusa un'altra domanda ma ho settato il file.htaccess come dici tu ma con yslow mi da questa "errore" 
There are 6 static components without a far-future expiration date. 
http://www.tregima.it/ templates/yoo_ambient_1.5/css/ template.css.php?... 
http://www.tregima.it/ templates/yoo_ambient_1.5/lib/ js/mootools.js.php 
http://www.tregima.it/media/ system/js/caption.js 
http://www.tregima.it/ components/com_chronocontact/ js/ livevalidation_standalone.js 
http://www.tregima.it/ components/com_chronocontact/ js/jsvalidation2.js 
http://www.tregima.it/ templates/yoo_ambient_1.5/lib/ js/template.js.php 
 
Sai per caso come posso risolverlo? 
Grazie mille 
 
stefano

Scritto da: stefano (Guest) 13-02-2010 14:15

RE:

I file php dubito si possano cachare, mentre quelli js dovresti riuscire a comprimerli in un unico file con CcsJsCompress..

Scritto da: nemesis (Membro) 14-02-2010 01:16

js e css da altro dominio

per prima cosa grazie per l'articolo che è una vera miniera di consigli utili che per ora mi ha fatto recuperare 15 punti su Pagespeed. E io non capisco nulla di php e programmazione, quindi due volte grazie. Ho però un problema che mi pare non avere soluzione, almeno per me. Modificando htaccess ho settato gli expire headers per i files che risiedono sul mio dominio. C'è qualcosa che posso fare per alcuni js e css che provengono da un modulo di prenotazione on line che risiede su un altro dominio su cui io non posso mettere mani?

Scritto da: tetoelbano (Guest) 28-04-2010 19:13

RE: js e css da altro dominio

Che io sappia no. Ma non è poi così grave. 
 
Al massimo se proprio vuoi ottimizzare ancora di più puoi installare memcached sul server (se hai un VPS o un dedicato o nel caso il tuo hosting disponga di questo servizio) e utilizzare il componente QueryCache integrandolo con memcached.

Scritto da: nemesis (Membro) 29-04-2010 19:51

joomla lentissimo nonostante.....

Chiedo aiuto, sto impazzendo !!! 
gestico un giornale www.oggimedia.it, ma nonostante abbia seguito con scrupolo tantisimi dei consigli qui descritti, in modo magistrale, il sito risulta ancora eccessivamente lento. 
 
Premesse: 
il server è: un virtual server di aruba linux con solo questo dominio. 
gzip: abilitato 
Cache 15 minuti 
System - Cache abilitato 
CssJsCompress3.5 installato 
statistiche solo con shinystat.it 
Ottimizzare le tabelle MySQL: fatto 
.htaccess - Settare gli Expires headers e cache control: fatto 
.htaccess - isattivare ETags: si 
yslow: da "F" di partenza ad un attuale "D" 
 
potete darmi una vostra valutazione su ciò che mi convine fare aumentare la velocità di questo benedetto sito? 
grazie a tutti per l'impegno e il tempo che vorrete dedicaremi...

Scritto da: Roberto (Guest) 23-07-2010 11:59

joomla lentissimo nonostante.....

aiuto solo voi potete aiutarmi!!! 
nonostante abbia fatto tante di quelle cose sopra descritte mi trovo con un caricamento lentissimo delle pagine oltre 13 secondi.... 
Essendo un sito aggiornato quotidianamente, non posso impostare la casche sopra i 15 minuti. 
Il sito è www.oggimedia.it, attualmente è hostato su un virtualserver di aruba, potrese analizzarlo e darmi qualche consiglio su come ottimizzare questa tartaruga!!! 
grazie in anticipo

Scritto da: Roberto (Guest) 30-07-2010 11:23

RE: joomla lentissimo nonostante.....

Ho provato il tuo sito. Non è poi così lentissimo, di sicuro non riscontro i 13 secondi. 
 
Il server in questione è aruba.. ora devi specificare che tipo di hosting, se VPS, dedicato o shared hosting. 
Sicuramente vedo che ci sono troppi file esterni. 18 javascript, 16 css e 27 immagini. Qui c'è da fare un bel lavoro di rifinitura, ma puoi farlo solo se sai cosa stai facendo e dove mettere le mani. 
 
Scarica e installa YSLOW su firefox e lancia un test.. segui quei consigli per l'ottimizzazione.

Scritto da: nemesis (Membro) 30-07-2010 16:53

file .htaccess

Ciao... 
ho tentato d'inserire le nuove direttive sul file .htaccess.. ma il sito si è oscurato e ho dovuto ripristinare immediatamente il vecchio file. 
Il codice che hai indicato va incollato così com'è? E dove deve essere inserito esattamente? 
Specifico che il mio sito è su aruba- può derivare da lì il problema? 
(Sono alle prime armi.. ogni ulteriore chiarimento che vorrai dare sul famigerato file non sarà superfluo :) grazie 1000

Scritto da: julia (Guest) 27-09-2010 15:50

RE: file .htaccess

devi andare a vedere il log di errori del server e vedere che tipo di problema è. 
Potrebbe essere che qualcuno di quei moduli non è attivo o magari ne è proibito l'uso su aruba. Non saprei. 
 
Vedi il log degli errori del server e posta l'errore che ricevi.

Scritto da: nemesis (Membro) 02-10-2010 18:35

safari mobile

salve.. ho costruito un sito web con joomla... adesso a lavoro ultimato mi ritrovo il sito che funziona perfettamente ma su iphone che utilizza safari nn si vede la tastiera e quindi non vedono i campi dove loggarsi ecc... Non funziona. Come posso fare?? grazie

Scritto da: antonello (Guest) 10-03-2011 09:22

Aggiungi il tuo commento

Solo gli utenti possono commentare un'articolo.
Successivo ›

Login

Hai dimenticato la password?

Registrati