Addio all’hosting parte 4 – Ottimizzazione

PHP ha questo fastidioso problema che è stato concepito come se la RAM e la compilazione fossero il peccato originale.

Ne consegue che, con l’approccio di base, quando chiedete una pagina il povero webserver lancia PHP indicandogli la pagina richiesta, questo si legge lo script, processa tutti i file da includere, in modo ricorsivo, e quando ha finalmente lo script completo, lo trasforma in codice eseguibile (a.k.a. lo compila just in time) e come ultima cosa lo esegue. La cosa è immensamente inefficiente se deve essere fatta ogni volta che viene richiamata una pagina. Sarebbe bello delegare ad altri il linking e la compilazione per lasciare al sever solo l’esecuzione ma questo è molto complesso da fare con PHP (anche se qualcuno lo ha fatto) percui ho scelto l’approccio più tradizionale della cache.

Ci sono due moduli che possono venirci in aiuto APCu e OPCache.

Il concetto di base è di non rieleggere (e possibilmente non ricompilare) file messi in cache.
OPCache in particolar modo memorizzare il bytecode risultante dalla compilazione delle pagine in memoria e quindi raggiunge l’obbiettivo dell’efficienza. Su un server di produzione con aggiornamenti poco frequenti si possono calibrare le impostazioni per ricompilare il meno possibile.

La mia configurazione di OPCache assomiglia a questa :

zend_extension=/usr/lib64/php/modules/opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=120
opcache.blacklist_filename=/etc/php.d/opcache*.blacklist

In particolar modo la frequenza di rivalidazione a 2 minuti mi è sembrata ragionevole ma può essere ulteriormente aumentata. Il valore è in secondi, più sale e più aumentano gli hit della cache, ma aumenta anche il tempo che passa tra quando una modifica viene caricata sul server quando effettivamente diventa visibile.

OPCache è incluso di default a partire da PHP 5.5, ma nella mia installazione ho ancora PHP 5.4 quindi è necessario installarlo separatamente.

Come risultato ho un Time to first byte per wordpress di 0,4s e download dell’html in 0.6s. In hosting (dove immagino ci siano persone che pensano molto come ottimizzare i server in quanto ottimizzazione uguale minor costi) 0,45s e 0,8s

Con phpBB il Time to first byte scende addirittura a 0,13s e html completo in 0,52s .

Quattro passi verso l’ottimizzazione

Molte persone, me compreso, usano Google Analytics per migliorare le proprie campagne di marketing online e di acquisto di Keywords, ma G.A. offrea anche potenti tools di identificazione visitatore e di trend di navigazione. Senza i dati corretti, ottimizzare un sito puo essere un compito molto difficile. Per chi è alle prime armi con il mondo dell’analisi web, tutti i dati circa l’ottimizzazione del contenuto possono essere un pò disorientati. Per questo qua ci sono quattro step per aiutare l’ottimizzazione tramite le informazioni fornite da G.A. :

1. Create un percorso di Navigazione Canalizzata
Chi disegna un sito sa, o almeno dovrebbe sapere, qual’è il percorso che gli utenti devono compiere all’interno del sito. Per monitorare che questo avvenga correttamente creiamo all’interno di Analytics degli obbiettivi e la navigazione per arrivare a questi in modo da poter analizzare dove e in che percentuale si perdono gli utenti. Ad ogni obbiettivo si puo inserire un valore moneteria per “contabilizzare” i visitatori o rendere confrontabili obbiettivi con un diverso valore.

2. Aspettate
Aspettare 2 o 3 settimane in modo da avere dati meno influenzati da condizioni particolari ( weekend, festività, etc ) e statisticamente piu affidabili.

3. Controllare pochi report chiave e rivalutare la Canalizzazione
Aprite Analytics e controllate sotto Ottimizzazione Contenuto > Rendimento Contenuto > Contenuti Principali. Ordinate la lista delle pagine in base alla colonna “Indice $”. Questa colonna vi dice quanto ciascuna pagine del vostro sito vale. L’indice $ è basato su quanto spesso una transazione è completata o un obbiettivo raggiunto quando una specifica pagina è stata caricata durante il percorso di visita. L’indice $ in pratica da un valore alla pagina calcolato in base al valore dell’obbiettivo raggiunto passando per quella pagina.
Ricordate, questa colonna non conterrà dati finchè gli obbiettivi non verrano definiti.
Ordinando le pagine in base al loro valore chiedetevi perchè alcune pagine sono in cima, se questo era prevedibile o meno, e che ruolo hanno queste pagine all’interno del percorso dell’utente. Riflettendo su queste domande vi potreste trovare a dover riconsiderare il percorso di navigazione ideato all’inizio, o scoprire che alcune pagine sono difficile da raggiungere.

4. Ottimizzate !
Con le informazioni ottenute, il prossimo compito è fare le modifiche che vanno fatte. Cercate di individuare i problemi e ridisegnate il sito per evitarli. Fatto questo ricominciate dall’inizio. Conservare i visitatori e trasformarli in consumatori, o finalizzatori di obbiettivi deve sempre essere la motivazione e l’obbiettivo dei cambiamenti nel vostro sito

via Analytics Blog