Ormai la maggior parte dei siti che girano sulla rete sono sviluppati con linguaggi lato server ed utilizzando database per immagazzinare dati da mostrare all'utente in base alle richieste. La continua evoluzione del mondo internet ha portato alla parallela evoluzione degli strumenti utilizzati e ad un conseguente incremento delle funzionalità fruibili attraverso un'applicazione web. Purtroppo troppe funzionalità portano spesso ad un drastico decremento delle prestazioni. Una soluzione al problema risulta spesso l'acquisto di hardware più potente ma costoso.
Vi sono però un paio di soluzioni alternative che molti siti ormai adottano e che è bene siano conosciute da chiunque.
La prima soluzione è l'utilizzo di programmi che accellerano l'esecuzione del codice nativo, migliorando spesso drasticamente i tempi di compilazione dei sorgenti. Il funzionamento è abbastanza semplice: salvano in memoria il codice intermedio generato dall'interprete per un determinato script, lo ottimizzano e lo restituiscono ad ogni richiesta dello script in questione. Le soluzioni per PHP sono molte, alcune commerciali altre gratuite. Personalmente utilizzo phpAcelerator, ma esistono valide alternative come lo Zend Optimizer (che ottimizza file codificati con Zend Encoder) oppure Turck MMCache. Da prendere in considerazione anche il package PECL APC.
Questa soluzione porta ottimi miglioramenti delle prestazioni, che possono essere notevolmente incrementati sfruttando delle pratiche di caching sui dati elaborati e sulle pagine generate. Difatti accade spesso che alcune pagine vengano accedute migliaia di volte dai visitatori, e che queste pagine richiedano svariate operazioni di calcolo per restituire risultati che cambiano raramente. Per esempio spesso ci si trova a dover effettuare operazioni su database ed elaborazioni delle template per rendere il risultato in modo corretto. Salvando lo stato finale dei dati elaborati è possibile ridurre notevolmente il carico di lavoro del server ed i tempi di elaborazione. I sistemi di caching sono spesso relativi a determinati ambiti, ma spesso le soluzioni proposte si focalizzano sul salvataggio dei dati recuperati da database e sul salvataggio dell'output.
Ora utilizzo una libreria fatta in casa, ma ho provato varie soluzioni: abbiamo jpCache per esempio, oppure UnEarth. Anche i package Cache e Cache_Lite di PEAR sono ottimi esempi e risultano utili in molte situazioni. Ma i sistemi sono talmente tanti che trovare quello adatto alle proprie esigenze risulterà quasi un impresa!
Tempo fa ho scritto anche un semplice articolo riguardo il caching. Magari a qualcuno potrebbe interessare.