
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
- Perché è importante la cache di oggetti persistenti
- Come funziona la object cache in WordPress
- Tipi di object cache disponibili
- Implementazione con APCu
- Implementazione con Redis
- Best practices e configurazioni consigliate
- Come verificare che la cache funzioni
- Vantaggi concreti per il tuo sito
- Conclusione
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:
- Installa APCu sul server:
sudo apt install php-apcu sudo systemctl restart apache2 - Verifica che APCu sia abilitato lato web server tramite un file
info.phpcon<?php phpinfo(); ?>. - Crea il file
wp-content/object-cache.phpcon 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:
- Installa Redis e l’estensione PHP:
sudo apt install redis-server php-redis sudo systemctl enable redis-server sudo systemctl start redis-server - Installa il plugin Redis Object Cache su WordPress.
- Attiva il plugin e clicca su “Enable Object Cache” dal pannello del plugin.
- 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.




