// Adaugă în wp-config.php pentru a optimiza comportamentul Redis
define('WP_REDIS_SELECTIVE_FLUSH', true);
define('WP_REDIS_MAXTTL', 2419200); // Cache 4 săptămâni pentru obiecte statice
// Exemplu de WP_Query optimizat în WooCommerce
$args = [
'post_type' => 'product',
'posts_per_page' => 10,
'no_found_rows' => true, // Sărim peste SELECT FOUND_ROWS() - economisim 30% timp pe query
'update_post_meta_cache' => false, // Nu încărca meta dacă nu ai nevoie de el imediat
'update_post_term_cache' => false,
];
$query = new WP_Query($args);Salutare. Am lucrat recent la un magazin WooCommerce cu vreo 12.000 de produse și peste 80 de pluginuri active (clasicul monstru WordPress). Timpul de răspuns pe paginile de produs era undeva la 3.2 secunde, iar în checkout... mai bine nu vă zic. Am reușit să coborâm sub 700ms TTFB fără să schimbăm serverul (un VPS de 30 de euro de la Hetzner).
Hai să vă spun exact ce am făcut și unde ne-am lovit cu capul de pragul de sus.
1. Redis Object Cache (Salvarea bazei de date)
Implicit, WordPress interoghează baza de date pentru orice bucățică de opțiune sau transient. La 12k produse, un singur load de pagină genera peste 250 de query-uri SQL. Am instalat Redis pe server și pluginul Redis Object Cache (cel de la Till Krüss).
Ce am câștigat? Numărul de query-uri a scăzut de la 250 la sub 30 pe pagină. Redis ține în memorie tot ce înseamnă opțiuni, transients și rezultate de query-uri repetitive.
Trade-off-ul: Memoria RAM. Redis mănâncă RAM direct proporțional cu traficul și numărul de obiecte cache-uite. Pe VPS-ul de 8GB, am alocat 1GB doar pentru Redis cu politica volatile-lru ca să nu ne trezim cu crash-uri de tip Out Of Memory. Dacă aveți hosting shared ieftin de 3 euro, uitați de Redis, mai mult o să vă strice site-ul.
2. Cloudflare APO (Să nu mai ajungă traficul la PHP)
Pentru paginile de categorii și produse, PHP-ul nici n-ar trebui să ruleze. Am activat Cloudflare APO (Automatic Platform Optimization) — costă 5$ pe lună.
APO știe nativ de WooCommerce. Cache-uiește paginile direct pe edge-ul Cloudflare și dă bypass automat când detectează cookie-urile specifice de sesiune: wp_woocommerce_session_ sau woocommerce_items_in_cart.
De ce am înjurat la el: Dacă ai un plugin de wishlist sau monedă dinamică bazat pe IP-ul userului, APO îți va servi pagini cache-uite cu moneda sau produsele greșite. A trebuit să rescriem logica de geo-IP prin AJAX. Nimic nu e complet gratis pe lumea asta.
3. Optimizarea Query-urilor (Groapa de gunoi numită wp_postmeta)
WooCommerce pune totul în wp_postmeta. Când cauți produse după atribute sau preț, baza de date face niște JOIN-uri de plângi lângă monitor.
Am făcut două chestii rapide. În primul rând, am adăugat indexuri pe meta_key și meta_value (folosind WP Indexer). În al doilea rând, am modificat query-urile custom din temă. De exemplu, dacă folosești WP_Query doar ca să afișezi produse recente, dezactivează calcularea paginării dacă nu ai nevoie de ea. Asta scutește MySQL de un SELECT FOUND_ROWS() extrem de lent pe tabele mari.
Voi cum gestionați monștrii de WooCommerce? Mergeți pe varianta headless sau încă vă luptați să stoarceți performanță din PHP și MySQL?