Mentre facevo un po’ di performance tuning su un server web dedicato all’hosting condiviso mi è venuta la curiosità di provare alcuni plugin di caching per wordpress. Per chi non lo sapesse i plugin di caching per wordpress a grandi linee fanno in modo di salvare su disco una copia statica delle pagine servite in modo da velocizzare le successive richieste e, nel contempo, ridurre il lavoro che deve compiere il server per eseguire codice php e query sul database.
Ho fatto i test su questo stesso blog (attualmente WordPress 2.8.3) usando due tra i plugin più diffusi, wp-cache e wp super cache, e uno abbastanza recente creato espressamente per lavorare su siti in shared hosting: Hyper cache. Naturalmente ho verificato anche cosa succede disabilitando tutte le cache.
Per fare i benchmark ho utilizzato un tool a linea di comando disponibile su tutte le distribuzioni Linux: siege. L’utilizzo è piuttosto semplice: si crea un file di testo (urls.txt) con un elenco di urls del sito da testare (nel mio caso ne ho usate 20) e si lancia il test su queste urls con i parametri adeguati.
Nel mio caso la linea di comando era questa (con spiegazione dei parametri):
siege -i -d 30 -c 100 -t 60s -f urls.txt
-i, --internet INTERNET user simulation, hits the URLs randomly.
-d, --delay=NUM Time DELAY, random delay between 1 and num designed to simulate human activity. Default value is 3
-c, --concurrent=NUM CONCURRENT users, default is 10
-t, --time=NUMm TIME based testing where "m" is the modifier S, M, or H
-f, --file=FILE FILE, change the configuration file to file.
In soldoni vengono simulati 100 visitatori contemporanei che visitano le urls presenti nella lista e che richiedono una nuova pagina dopo un tempo variabile da 1 a 30 secondi. La durata del test è di 60 secondi. Di default una richiesta va in timeout se non ottiene risposta dal server dopo 30 secondi.
I risultati sono stati piuttosto sorprendenti. In breve wp-cache e wp super cache non offrono alcun beneficio rispetto a wordpress pulito senza cache (anzi!!). Al contrario hyper cache da risultati eccellenti: il numero di richieste al secondo soddisfatte (Transaction rate) è circa 3 volte superiore. Di seguito riporto gli output dei benchmark (i test sono stati ripetuti 3 volte per ogni configurazione e qui viene riportato il risultato intermedio):
No cache:
Transactions: 125 hits
Availability: 99.21 %
Elapsed time: 59.76 secs
Data transferred: 0.98 MB
Response time: 18.40 secs
Transaction rate: 2.09 trans/sec
Throughput: 0.02 MB/sec
Concurrency: 38.50
Successful transactions: 125
Failed transactions: 1
Longest transaction: 30.03
Shortest transaction: 0.88
wp-cache:
Transactions: 117 hits
Availability: 90.70 %
Elapsed time: 60.49 secs
Data transferred: 0.89 MB
Response time: 18.17 secs
Transaction rate: 1.93 trans/sec
Throughput: 0.01 MB/sec
Concurrency: 35.15
Successful transactions: 117
Failed transactions: 12
Longest transaction: 29.90
Shortest transaction: 0.92
wp super cache:
Transactions: 116 hits
Availability: 94.31 %
Elapsed time: 60.29 secs
Data transferred: 0.92 MB
Response time: 20.17 secs
Transaction rate: 1.92 trans/sec
Throughput: 0.02 MB/sec
Concurrency: 38.82
Successful transactions: 116
Failed transactions: 7
Longest transaction: 31.54
Shortest transaction: 0.00
Hyper cache:
Transactions: 359 hits
Availability: 100.00 %
Elapsed time: 60.15 secs
Data transferred: 2.80 MB
Response time: 0.12 secs
Transaction rate: 5.97 trans/sec
Throughput: 0.05 MB/sec
Concurrency: 0.71
Successful transactions: 359
Failed transactions: 0
Longest transaction: 2.40
Shortest transaction: 0.02
Il load del server è stato costantemente elevato (oltre 30!!) al termine dei test senza cache, con wp-cache e wp super cache, mentre con hyper cache il load non si è praticamente mosso dallo 0,1 solito.
A scanso di equivoci tutti i test sono stati effettuati verificando su filesystem che i file statici venissero effettivamente scritti dal plugin e svuotando la cache prima di lanciare il test.
In conclusione hyper cache sembra essere di gran lunga più efficiente rispetto agli altri due, almeno nella mia configurazione. Immagino però che i risultati possano variare in base ad un numero molto elevato di variabili, dalla configurazione del server web e del php fino alla configurazione di worpress e dei plugin medesimi, quindi non pretendo che questi risultati abbiano un valore assoluto. Sta di fatto però che sono rimasto davvero impressionato dal comportamento di hyper cache, tanto da adottarlo in pianta stabile su questo blog (sebbene, lo ammetto, il numero di visitatori non lo renda assolutamente necessario) e da consigliarlo vivamente a tutti coloro che hanno un blog, a maggior ragione se su hosting condiviso. E visto che, ahimè, viviamo in un mondo di sospetti e di veleni, chiarisco che non ho alcun rapporto nè nessuna particolare simpatia/antipatia nei confronti degli autori dei plugin che ho provato ![]()
Popularity: 11% [?]

8 commenti fino ad ora ↓
1 dax // ago 13, 2009 at 16:03
ben tornato
… interessante testimonianza, la terrò presente.
2 enrico // ago 13, 2009 at 17:29
3 Stefano // ago 16, 2009 at 13:10
Grazie per la statistica, molto interessante. In teoria avresti dovuto trovare wp-super-cache un po’ più efficiente di hyper cache (se non altro perché avendolo scritto so come è fatto), ma come dici è una questione di tipo di traffico e di configurazione!
4 enrico // ago 25, 2009 at 16:16
Grazie a te per aver scritto il plugin
5 Milano Interista riapre » Orientalia4All // nov 1, 2009 at 08:05
[...] sito è stato rimesso su dal grande Zaffa con la collaborazione di Ludo. E poi, detto fra noi, la foto grande del blog, quella con lo [...]
6 DoZ // set 3, 2010 at 12:22
…però tu ora stai usando w3 total cache
7 enrico // set 3, 2010 at 13:37
Eh eh … già
….. ma solo perchè ha il supporto per memcached, che è presente sul server dove gira il sito e va super bene.
8 novo // set 6, 2010 at 19:30
oggi mi è andato in bomba il sito x le troppe visite…vediamo un pò questo hypercache se funziona veramente…domani vi dirò
Inserisci un commento