Già dalla versione 2.8 di WordPress esiste un meccanismo nel core che permette il caching dei dati: la Transients API. Con poche righe di codice ci si può risparmiare tutto lo stress di funzionalità proprie che servono soltanto a velocizzare un plugin o una pagina con dati già elaborati.
Le funzioni della Transients API sono simili alla WordPress Options API che dovrebbe rendere l’implementazione molto facile. Oltre ai nomi delle funzioni c’è solo una differenza: un parametro aggiuntivo che definisce la scadenza all’inserimento di un transient.
La Transients API ricorre a funzionalità della Options API se per esempio non vengono usati meccanismi di memcache. Dando un’occhiata al codice stesso della API si capisce perché non è detto che i dati verranno salvati nella tabella wp_options. Bisogna tenere in mente solo questo e altre due piccole cose.
Quando la Transients API invece usa la wp_options il primo problema è che la colonna option_name è per definizione un varchar(64). Nomi più lunghi vengono automaticamente accorciati. Non sembrerebbe così drammatico ma è utile sapere che i transients verranno salvati col prefisso _transient_.
Una seconda riga nel db che contiene il timestamp della scadenza assume automaticamente il prefisso _transient_timeout_ che significa che la lunghezza massima effettiva di un nome di un transient è limitata a 45 caratteri. Se si vuole inserire un transient con l’URL nel nome, l’uso di md5() sembrerebbe utile perché genera una stringa di 32 caratteri.
A questo punto serve un piccolo esempio di codice per spiegare come il mio plugin scGeSHi risolve la problemtica quando rileva i codici dai server remoti e li salva temporaneamente nel cache:
Un secondo problema ha solo indirettamente a che fare con la Transients API. Le funzionalità della Options API usano le funzioni serialize() e unserialize(), cosa che diventa problematica con gli oggetti SimpleXML. Durante il test di myLCO me ne sono ricordato a mie spese.
Chi conosce queste piccole insidie ha però a disposizione un meccanismo molto robusto e veloce per il caching dei dati. Anche non usando la Transients API a questo punto è possibile capire cosa sono le righe in wp_options che hanno un prefisso _transient_. In ogni caso non dovrebbe essere un problema cancellarle. WordPress o il plugin responsabile eventualmente creano di nuovo i dati necessari.