Acasă » Blog » Optimizare queries in WordPress

Optimizare queries in WordPress

  • Wordpress
  • 2 min read
Share this post on social!

Salut,

Pentru site-urile doctorulzilei.ro, animalzoo.ro si starjunior.ro toate construite pe WordPress avand la baza tema Magazine Explorer de la WPZOOM.com s-a pus problema optimizarii interogarilor pe baza de date, in cadrul mai larg al optimizarii site-urilor cu trafic important (numai doctorulzilei.ro a avut pe luna martie 2014 un numar de afisari de pagina de ~ 1.287.066 ).

Pentru optimizarea homepage-ului am indentificat o cale de lucru: cele 3 widget-uri de sus (slideshow-ul, stirile din partea dreapata a acestuia si caruselul de sub slideshow) produceau 5 interogari iar pentru afisarea stirilor din homepage de sub cele 3 widgeturi aceste 5 interogari se reefectuau penru a fi eliminate din query-ul principal. In plus query-ul principal era “inlocuit” cu query_posts – a carui utilizare este descurajata de documentatia WordPress (vezi query_posts)

Plecand de la ultima afirmatie, am inlocuit query_posts cu modificarea $wp_query prin action hook-ul ‘pre_get_posts’;

… adica am setat ‘post_not__in’ cu un vector care include toate articolele care apar in cele 3 widget-uri. Vectorul se umple bineinteles tot in functia actionata cu ‘pre_get_posts’.

Apoi am modificat cele 3 widget-uri: inlocuirea “new WP_Query” si ciclul “while($loop->have_posts()…” cu ciclarea vectorului global corespunzator widgetului, construit la ‘pre_get_posts’ (are doar id-urile articolelor)

Astfel ca in acest moment din 10 interogari, se executa doar 3 si se elimina utilizarea query_posts care consuma multe resurse.

Mai poate fi facut ceva?

Da: cei 3 vectori (+ eventual vectorul obtinut prin reununea lor) pot fi pastrati in transienti, astfel incat cele 3 query-uri nu se mai executa ci doar 3 query pentru transientii respectivi. Diferenta este importantqa, pentru ca la transienti, interogarea se face pe 1 singur tabel: wp_options; daca valoarea pastrata este mica (aici doar un vector cu cateva id-uri de articole) avem o reducere importanta de consum de resurse pentru interogarea bazei.

… si asta se vede foarte bine la trafic mare. Oricum, noua “schema” fiind implementata pe homepage-ul de la doctorulzilei.ro , oricine poate testa viteza de incarcare a paginii in browser la a doua, a treia etc improspatare a paginii.

Spor tuturor!

Lasă un răspuns

Traian Constantin Predan

Traian Constantin Predan

Inginer absolvent al Politehnicii București proiectează și construiește sisteme online. Lucrează proiecte extrem de diverse, îi plac viziunile noi care provoacă la dezvoltarea unor soluții tehnice eficiente și stabile.