WP Super Cache e ADV possono davvero convivere? Esiste un sistema per far sì che il sito WordPress sia veloce e in cache e che una parte di codice sia invece rigenerato ad ogni caricamento? Sì, esiste e sono felice di raccontartelo.

Cos’è la cache di WordPress (e non solo)

So che sei arrivato qua sai perfettamente cosa significa Cache e che stai cercando una soluzione molto tecnica, è in fondo al post, ma partiamo dal capire cos’è la cache e cosa serve.

Torniamo alle origini, come viene visualizzata la tua pagina su un browser?

  1. l’utente digita www.sito.it
  2. il server carica sequenzialmente il primo file configurato, che a sua volta va a chiamare altri file, i quali, nel caso di siti dinamici, interrogano un database.
  3. il database restituisce dei valori alle pagine che li chiedono, e “popolano” i vari campi.
  4. il server crea così una pagina temporanea con l’html generato e lo restituisce al browser, andando a collegare anche le immagini che come sappiamo sono staccate dal codice HMTL e sono file separati.

Questo quindi è il processo che avviene per OGNI pagina che visualizziamo di un sito, per ogni utente.
La mole di risorse che il server deve impiegare per ogni pagina vista, di ogni visitatore va chiaramente ad incidere sulle prestazioni, e si può rischiare che il server non ne abbia più a disposizione e si blocchi. Questo è abbastanza frequente con gli hosting condivisi e low-cost.

Cosa fa la cache

Ora che abbiamo ripassato come si genera una pagina HTML, possiamo parlare di cache. Questo sistema (o meglio, questi sistemi) non fanno altro che “stampare” il file HTML generato dal primo utente che visita quella pagina e creare una regola che dice: se un utente vuole vedere questa pagina, non ricarico dal database, ma gli faccio vedere la versione stampata (ok, meglio “salvata”).

Il vantaggio è ovvio: molta velocità e riduzione drastica del carico del server, possibilità di servire più utenti contemporanei e via così.

Lo svantaggio? il file generato è statico. Se l’editor fa una modifica o corregge un refuso, dovrà rigenerare la cache di quella pagina, altrimenti tutti gli utenti vedranno ancora la pagina vecchia.

E lo svantaggio ancora più grande? Mettiamo che la pagina abbia una ADV, che potrebbe essere un banner a rotazione o un frame esterno. Questa verrebbe stampata insieme a tutto il resto della pagina e altri banner non verranno caricati, finché non verrà cancellata la cache di quella pagina e un nuovo visitatore non crea la nuova cache.

WP Super Cache e ADV

Il problema quindi è legato sopratutto a se dobbiamo monetizzare il nostro WordPress vendendo spazi ADV e usiamo un sistema di cache come ad esempio WP Super Cache, sviluppato dallo stesso tema (ma anche W3 Total cache o WP Rocket), perchè se la pagina diventa statica, anche il banner lo diventa e verrà proposto sempre lo stesso a tutti i clienti, e addio remarketing e combinazioni varie.

Come risolvere? Ajax o Mfunc!

Possiamo risolvere il problema sia con Ajax che con Mfunc. Ajax è un sistema Javascript che permette di recuperare un contenuto in maniera asincrona, che quindi viene caricato dinamicamente e va a sostituire un oggetto caricato dinamicamente: per esempio carico in cache una immagine e via Ajax gli dico di sostituirla. Esiste anche un plugin che ci aiuta a creare un Widget-Ajax dove poter inserire un contenuto che deve essere sempre dinamico (No-cache AJAX Widgets). L’ho provato, carino ma non mi ha convinto al 100%.

MFUNC invece è sostanzialmente molto più semplice, anche se richiede qualche competenza nel modificare il tema usato. Mfunc è un tag di commento speciale, introdotto nella versione 1.4 di WP Super Cache nel 2013 e negli altri sistemi di cache. Sostanzialmente non fa altro che dire: da qua a qua vai in dinamico, non statico.

L’utilizzo è molto semplice:

<!-- mfunc dinamic_content -->
<?php //SKIN BANNER
echo adrotate_group(1);?>
<!-- /mfunc -->

facendo così abbiamo risolto il problema e il banner viene rotato correttamente (in questo caso generato da AdRotate Banner Manager).