Dovresti utilizzare la cache di oggetti persistenti: l’object-cache.php

Se gestisci un sito WordPress e vuoi migliorare le prestazioni senza appesantire il sito con plugin eccessivi, capire e implementare la object cache persistente è fondamentale. In questa guida esploreremo cos’è, perché è importante e come configurarla correttamente. Alla fine avrai gli strumenti per rendere il tuo sito più veloce e stabile.

Indice degli argomenti

Introduzione alla object cache

WordPress gestisce moltissimi dati dinamici. Ogni volta che un visitatore carica una pagina, il CMS deve interrogare il database per recuperare post, utenti, impostazioni e altre informazioni. Questo processo può diventare lento su siti con molti contenuti o con traffico elevato.

La object cache è un sistema che salva temporaneamente questi dati in memoria, evitando di ripetere ogni volta le stesse query. Quando la cache è persistente, i dati rimangono disponibili tra più richieste, migliorando drasticamente le performance del sito.

Perché è importante la cache di oggetti persistenti

Una cache di oggetti persistente permette di:

  • Ridurre il carico sul database, perché le query più frequenti vengono servite dalla memoria.
  • Velocizzare il tempo di caricamento delle pagine, migliorando l’esperienza utente.
  • Supportare meglio i picchi di traffico, evitando rallentamenti o errori di timeout.
  • Minimizzare la dipendenza da plugin di caching pesanti che possono appesantire WordPress.
  • Rendere più efficiente la pubblicazione di articoli programmati, eventi WP-Cron e processi automatizzati.

Come funziona la object cache in WordPress

WordPress dispone di un sistema di object caching interno che funziona così:

  • Quando una funzione richiede un dato (es. `get_post()`, `get_option()`), WordPress controlla prima se è presente in cache.
  • Se il dato è presente, viene restituito immediatamente (cache hit).
  • Se il dato non è presente, WordPress esegue la query al database e salva il risultato in cache (cache miss).
  • La cache persistente mantiene i dati in RAM tra richieste, a differenza della cache predefinita che dura solo fino alla fine della richiesta.

Questo sistema si basa su un “drop-in” chiamato object-cache.php posizionato nella cartella wp-content. Senza questo drop-in, la cache non è persistente e ogni richiesta riparte da zero.

Tipi di object cache disponibili

Esistono diverse soluzioni per la cache di oggetti persistente in WordPress:

  • APCu: leggero, funziona in memoria sul singolo server. Ideale per siti medi e senza cluster di server.
  • Redis: potente e persistente, adatto per siti con traffico alto o più server.
  • Memcached: simile a Redis, utile in cluster o hosting condiviso.
  • Altri sistemi di cache lato database o lato server possono essere integrati tramite drop-in.

Implementazione con APCu

APCu è semplice da configurare e non richiede plugin pesanti. Ecco come procedere:

  1. Installa APCu sul server:
    sudo apt install php-apcu
    sudo systemctl restart apache2
  2. Verifica che APCu sia abilitato lato web server tramite un file info.php con <?php phpinfo(); ?>.
  3. Crea il file wp-content/object-cache.php con uno script che fa da ponte tra WordPress e APCu:
<?php
class WP_Object_Cache_Safe {
    private $cache = [];
    private $use_apcu = false;
    public function __construct() {
        $this->use_apcu = function_exists('apcu_fetch') && ini_get('apc.enabled');
    }
    private function build_key($key, $group) {
        return ($group ? $group.':' : '').$key;
    }
    public function add($key, $data, $group = '', $expire = 0) {
        $id = $this->build_key($key,$group);
        if($this->use_apcu) return apcu_add($id,$data,$expire);
        if(!isset($this->cache[$id])) { $this->cache[$id]=$data; return true; }
        return false;
    }
    public function set($key,$data,$group='',$expire=0){ $id=$this->build_key($key,$group); if($this->use_apcu) return apcu_store($id,$data,$expire); $this->cache[$id]=$data; return true;}
    public function get($key,$group='',$force=false,&$found=null){ $id=$this->build_key($key,$group); if($this->use_apcu){ $val=apcu_fetch($id,$success); $found=$success; return $success?$val:false; } if(isset($this->cache[$id])){ $found=true; return $this->cache[$id]; } $found=false; return false;}
    public function delete($key,$group=''){ $id=$this->build_key($key,$group); if($this->use_apcu) return apcu_delete($id); if(isset($this->cache[$id])){ unset($this->cache[$id]); return true; } return false; }
    public function flush(){ if($this->use_apcu) return apcu_clear_cache(); $this->cache=[]; return true;}
}
$GLOBALS['wp_object_cache'] = new WP_Object_Cache_Safe();
?>

Questo permette a WordPress di usare APCu in modo sicuro e senza far crashare il sito se APCu non è disponibile.

Implementazione con Redis

Redis è ideale per siti ad alto traffico o con più server. Procedura:

  1. Installa Redis e l’estensione PHP:
    sudo apt install redis-server php-redis
    sudo systemctl enable redis-server
    sudo systemctl start redis-server
  2. Installa il plugin Redis Object Cache su WordPress.
  3. Attiva il plugin e clicca su “Enable Object Cache” dal pannello del plugin.
  4. WordPress inizierà a salvare gli oggetti in Redis, riducendo drasticamente il carico sul database.

Best practices e configurazioni consigliate

  • Non usare plugin pesanti per object cache se hai già APCu o Redis.
  • Imposta un limite di memoria adeguato in APCu (`apc.shm_size = 128M` o più).
  • Per siti grandi, Redis è preferibile perché condivisibile tra più server.
  • Non dimenticare di monitorare WP-Cron: eventi programmati come `wp_privacy_delete_old_export_files` dipendono dalla cache di oggetti per essere rapidi.
  • Controlla regolarmente la salute del sito e il TTFB: una cache efficiente riduce il tempo di risposta sotto i 600ms.

Come verificare che la cache funzioni

  • Strumenti WordPress → Salute del sito → Drop-in Object Cache
  • Plugin Query Monitor → controlla cache hit/miss
  • WP Crontrol → eventi cron programmati devono eseguire correttamente
  • Usa curl -I https://tuodominio.it/ per verificare header HTTP di cache

Vantaggi concreti per il tuo sito

  • Riduzione del carico sul database → meno rischio di timeout o rallentamenti.
  • Velocità di caricamento migliorata → migliori metriche Core Web Vitals.
  • Compatibilità con WP-Cron → articoli programmati e cleanup automatico funzionano sempre.
  • Meno plugin → sito più leggero e sicuro.
  • Scalabilità → Redis o APCu rendono il sito pronto per traffico elevato.

Conclusione

Se vuoi ottimizzare WordPress, implementare una object cache persistente non è un’opzione: è una necessità. Con APCu o Redis puoi velocizzare il sito, ridurre il carico sul database e garantire che gli eventi programmati funzionino correttamente. Questo approccio è molto più leggero e sicuro rispetto a molti plugin di caching complessi.

Ora che conosci l’importanza, i tipi di cache e come configurarli, puoi procedere con la tua implementazione. Ricorda di monitorare sempre WP-Cron e le prestazioni del server per ottenere il massimo beneficio.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *