Prestocare în WordPress


Aş fi scris “caching în WordPress” dar arăta prea ciudat ca titlu. Vă invit deci să vorbim puţin despre metodele de cache în WordPress. Am văzut anterior un plugin specializat pe aşa ceva dar care poate fi mega-uriaş şi complicat când ai nevoi mai mici. Aşa că să vedem ce putem face cu propriile mâini. Premisa: avem o pagină unde conţinutul ei este construit din, să zicem, 50 de interogări. De ce acestea să fie repetate la fiecare încărcare a paginii, când conţinutul este acelaşi până la publicarea de noi materiale? Cel mai bine este să generăm acel conţinut o singură dată (actualizat apoi la modificare), şi să îl folosim din “cache”, fără regenerare, fără interogări inutile.

imagine

Mai sus vedeţi un exemplu concret. La un anume sit (versiunea în lucru) am pe prima pagina un sumar al ultimelor ştiri. Sunt folosite n interogări (cu cât n e mai mare cu atât metoda e mai utilă). Am mutat generarea acelui conţinut în back-end. Cu un click îl generez şi apoi mă asigur că actualizez valoarea:

[PHP]update_option(‘continut_generat’,$continut_generat);[/PHP]

Evident, update_option la primul apel va funcţiona şi pe post de add_option, adăugând variabila cu pricina. Important: pornesc aici de la premisa că ştiţi scrie un plugin, sau măcar aveţi deschiderea de a învăţa. Nu voi explica fiecare pas, ci doar ideea generală. Presupunând deci că în back-end am scris funcţia ce construieşte “continut_generat”, tot ce ne mai trebuie este să afişăm acel conţinut. Putem crea o pagină goală şi scrie în ea [aici_vine_continutul_generat] iar în functions.php (din fişierele temei) să punem un cod de genul:

[PHP]function functiaPentruContinutulGenerat($atts, $content=null) {
return get_option(‘continut_generat’);
}
add_shortcode(‘aici_vine_continutul_generat’, ‘functiaPentruContinutulGenerat’);[/PHP]

Atât! Obiectivul a fost atins. Desigur, generarea aceea se face acum manual (apelul funcţiei). Putem însă folosi filtrele, şi apela la generare pe un eveniment asociat publicării articolelor; deci automat. Să recapitulăm: dacă aveţi conţinuturi ce necesită multe interogări putem grăbi lucrurile punând acele conţinuturi în variabile în tabela wp_options (nu trebuie manual, căci am văzut că WordPress oferă funcţii elegante).

O altă precizare importantă: folosirea unor astfel de metode asigură un stres mai mic pe server şi implicit o încărcare mai rapidă a paginilor (o reducere de la 100 la 30 de interogări de exemplu se simte – cel mai adesea – la viteză). Nu se reduce însă consumul de lăţime de bandă (bandwidth). Desigur, şi pentru aşa ceva se pot face unele lucruri/trucuri, pentru ca navigatoarele să ia din cache-ul propriu imagini sau fişiere (JavaScript, CSS), dar fără efecte zdrobitoare (discutabil, desigur). Implicarea mecanismelor de cache nu vă va reduce bandwidth-ul, ci doar plângerile de la hosting de genul “situl Dvs consumă prea mult procesor, afectându-i pe ceilalţi” (regimul shared).

În fine, aş încheia indicând spre mecanismul care ar putea fi numit cu adevărat mecanism de cache în WordPress: WP_Cache. Soluţia descrisă mai sus nu are “expirare”: o variabilă depozitată rămâne depozitată până la ştergerea intenţionată. Dacă sunteţi însă foarte riguroşi puteţi folosi funcţiile wp_cache, care asigură şi partea de “expirare”. Funcţia de bază este

[PHP]wp_cache_add($cevanume, $cevadate, $flag = ”, $expirare = 0)[/PHP]

Unde parametri indică: numele variabilei (necesar pentru regăsirea ulterioară), datele efectiv de memorat, opţional se pot grupa datele sub un anumit flag, şi în fine timpul de expirare (implicit 900 secunde). Avem apoi funcţii precum wp_cache_delete pentru o anumită variabilă, wp_cache_get pentru a lua valoarea unei variabile şi altele. Nu uitaţi că folosirea acestor funcţii presupune activarea în wp_config.php a mecanismului de cache (nu e nevoie de aşa ceva dacă lucraţi cu variabile, cum scriam eu mai sus).


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (Neevaluat încă)
Loading...Loading...

0 comentarii


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *