-- Curățare transient-uri expirate din wp_options care îngreunează autoload-ul
DELETE a, b FROM wp_options a
INNER JOIN wp_options b ON b.option_name = CONCAT('_transient_timeout_', SUBSTRING(a.option_name, 12))
WHERE a.option_name LIKE '_transient_%'
AND a.option_name NOT LIKE '_transient_timeout_%'
AND b.option_value < UNIX_TIMESTAMP();
-- Vezi dimensiunea totală a datelor încărcate la autoload ('yes')
SELECT SUM(LENGTH(option_value)) / 1024 / 1024 AS autoload_size_mb
FROM wp_options
WHERE autoload = 'yes';Am preluat în primăvară un magazin de piese auto pe WooCommerce cu vreo 15.000 de produse. Clientul plătea 120€/lună pe un VPS generos, dar TTFB-ul pe pagina de produs oscila între 1.5 și 2.2 secunde. Site-ul se mișca greoi, iar conversiile erau în scădere.
Nu serverul era problema, ci modul în care WordPress și WooCommerce procesau datele la fiecare request. Iată cei trei pași prin care am adus site-ul la ~220ms fără să schimbăm abonamentul de hosting.
1. Redis Object Cache: Scazi presiunea pe MySQL
WordPress e notoriu pentru interogările repetitive. Pe WooCommerce, fiecare încărcare de pagină cere atribute de produs, variante, prețuri și taxonomii. Fără un cache de obiecte persistent, baza de date e măcinată continuu de aceleași interogări SQL.
Am activat Redis folosind extensia PHP phpredis (evită Predis pe cât posibil, varianta nativă în C e vizibil mai rapidă). Diferența a fost imediată: de la 180 de interogări SQL per pagină am ajuns la doar 12-15 interogări active. Restul erau servite instant din RAM.
Trade-off sincer: Redis consumă memorie. Setarea implicită de 64MB din redis.conf e complet insuficientă pentru WooCommerce. Crește maxmemory la minim 512MB-1GB și setează maxmemory-policy allkeys-lru. Dacă se umple memoria și nu ai politica de eviction corectă, site-ul va returna erori 500 în PHP.
2. Cloudflare APO (Automatic Platform Optimization)
Cache-ul de pagină la nivel de Nginx/LiteSpeed e excelent, dar cache-ul în Edge este din altă ligă. Cloudflare APO costă 5$/lună și stochează HTML-ul generat direct pe POP-urile lor globale. Un vizitator din București primește HTML-ul gata generat din datacenter-ul Cloudflare din România, fără ca cererea să mai ajungă la VPS-ul tău.
Aici apare însă marea capcană: paginile dinamice ale coșului. Trebuie să verifici atent ca cooke-urile woocommerce_items_in_cart și wp_woocommerce_session_ să ocolească complet cache-ul. Altfel, un client va vedea coșul sau produsele vizualizate de alt client. Pluginul oficial Cloudflare rezolvă asta automat, cu condiția să nu ai reguli custom în functions.php care suprascriu header-ele de Cache-Control.
3. Mizeria din wp_options (Autoload Cleanup)
După ce am pus Redis și Cloudflare, tot mai aveam spike-uri ciudate de latență pe paginile de checkout. Am deschis Query Monitor și am înlemnit: tabela wp_options încărca peste 12MB de date la FIECARE request din cauză că opțiunile aveau autoload = 'yes'.
Multe pluginuri vechi sau dezinstalate lasă zeci de mii de transient-uri expirate marcate cu autoload. Am scris un script simplu care a șters transient-urile expirate și am trecut opțiunile masive de la pluginuri terțe pe autoload = 'no'. Am redus dimensiunea array-ului de opțiuni încărcat automat de la 12MB la sub 700KB.
Concluzie
Optimizarea WooCommerce nu înseamnă să pui 5 pluginuri de cache unele peste altele. Înseamnă să elimini munca inutilă: Redis scăpă baza de date de muncă repetaă, Cloudflare APO elimină execuția PHP pentru vizitatori, iar curățenia în DB menține totul fluid.
Voi ce soluții folosiți pentru shop-urile mari pe Woo? Ați avut bătăi de cap cu stocarea coșului pe CDN?