eduardweb.
Plugin-uriIntermediar#wordpress#woocommerce#redis#cloudflare#database-optimization

Cum am coborât TTFB-ul sub 150ms pe un WooCommerce cu 12.000 de produse

De Alin Pătrașcu, 2 iul. 2026 · 12 vizualizări · 2 like-uri

Postat 2 iul. 2026
javascript
// Dezactivează cart fragments pe paginile unde nu e nevoie de el
// Adaugă asta în functions.php pentru a opri request-urile inutile ajax spre wc-ajax=get_refreshed_fragments

add_action('wp_enqueue_scripts', 'disable_woocommerce_cart_fragments', 99);

function disable_woocommerce_cart_fragments() {
    if (is_front_page() || is_single() || is_archive()) {
        wp_dequeue_script('wc-cart-fragments');
    }
}

Am avut recent un proiect destul de dureros: un magazin WooCommerce cu vreo 12.000 de produse active și sute de variații pe fiecare produs. Clientul se plângea că la orele de vârf, când se strângeau vreo 150-200 de useri simultan pe site, totul se bloca. Pagina de checkout dura și 8 secunde să se încarce, iar serverul (un VPS destul de bunicel) dădea erori 504 în neștire.

Mulți cred că dacă trântesc un plugin de caching gen WP Rocket au rezolvat problema. Pe WooCommerce nu funcționează așa. Când ai useri care adaugă produse în coș, navighează prin cont sau fac checkout, cache-ul de pagină statică (HTML) este complet bypassed. Ai nevoie de optimizare pe bune.

Iată exact ce am făcut ca să aducem TTFB-ul la 120-150ms și cum poți face și tu asta.

Pasul 1: Curățenia în baza de date și query-urile mizerabile

Am instalat Query Monitor și m-am speriat. Aveam aproape 900 de query-uri pe pagina de categorie. WooCommerce folosește wp_postmeta pentru absolut orice: prețuri, stocuri, atribute. Când faci un query complex cu filtre, WordPress face join-uri peste join-uri, iar baza de date îngenunchează.

Prima măsură a fost să curăț mizeria din DB. Am șters tranzitorii expirate (transients) și am curățat tabelele de sesiuni WooCommerce vechi. Am avut peste 1.2 GB de date inutile în wp_options și wp_woocommerce_sessions.

Apoi, am dezactivat mizeria de wc-ajax=get_refreshed_fragments. Acest request se face la fiecare încărcare de pagină ca să actualizeze widget-ul de coș, dar omoară serverul pentru că pornește toată mașinăria PHP și WordPress în fundal. L-am dezactivat complet și am trecut pe un script custom care actualizează coșul în localStorage doar când utilizatorul chiar dă click pe "Adaugă în coș".

Pasul 2: Redis Object Cache (Salvarea bazei de date)

Fără un Object Cache bun, baza de date e interogată la fiecare refresh pentru aceleași opțiuni și metadate. Am configurat Redis pe server (pe socket, nu pe port TCP, pentru un plus de viteză) și am instalat plugin-ul Redis Object Cache de la Till Krüss.

Rezultatul? Numărul de query-uri către MySQL pe paginile dinamice a scăzut cu aproape 60%. Redis stochează în RAM rezultatele interogărilor frecvente.

Trade-off sincer: Redis mănâncă memorie RAM. Dacă ai un server shared ieftin de 2 euro pe lună, o să-ți crape din cauza lipsei de memorie. Recomand minim un VPS cu 4GB RAM dacă vrei să rulezi Redis stabil alături de PHP-FPM și MySQL.

Pasul 3: Cloudflare APO (Automatic Platform Optimization)

Pentru vizitatorii nelogați, Cloudflare APO este pur și simplu magic. Costă 5$ pe lună (sau e inclus în planul Pro). Ce face mai exact? Cachează paginile HTML direct în edge servers-urile Cloudflare globale.

Dacă un user din Timișoara accesează site-ul găzduit în Frankfurt, Cloudflare îi servește HTML-ul direct din serverul din București sau Budapesta în 20-30 de milisecunde. Partea mișto e că APO știe să facă bypass automat la cache instant când detectează cookie-urile de sesiune WooCommerce (wp_woocommerce_session_) sau când cineva adaugă ceva în coș. Clientul nelogat are viteză de site static, iar cel care cumpără are o experiență dinamică rapidă datorită Redis-ului.

La final, am reușit să ducem rata de conversie de la 1.1% la 2.3%, doar pentru că oamenii nu mai abandonau coșul din cauza timpilor de așteptare.

Voi ce folosiți pentru WooCommerce? Ați trecut pe soluții headless sau încă vă luptați cu monolitul clasic?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

Doar membrii comunității pot lăsa comentarii.