Caching obiecte în wordpress - revista wp

În articolul nostru despre fundamentele caching-ului în WordPress, am menționat pe scurt obiectele de cache. În acest articol vom încerca să luăm în considerare toate caracteristicile clasei WP_Object_Cache. unele nuanțe și motivul pentru care caching-ul obiectului joacă un rol important în performanța site-urilor WordPress.

Ce este cache-ul obiectului?

Executarea obiectelor Caching în WordPress (cache-ul de obiecte) este mecanismul integrat al sistemului, care vă permite să stocați date de orice tip și să primiți aceste date, dacă este necesar. Această memorie cache este utilizată pentru stocarea rezultatelor operațiilor complexe.

Pentru a înțelege cum funcționează cache-ul de obiecte în WordPress, luați în considerare un exemplu simplu al unei funcții care execută o interogare într-o bază de date:

Dacă numim această funcție de mai multe ori la rând, atunci de fiecare dată când executăm interogarea în baza de date:

Funcția foo () poate fi ușor accelerată prin cache-ul obiectelor din WordPress, plasând rezultatul interogării în memoria cache după cum urmează:

Funcțiile pentru lucrul cu cache-ul obiectelor și parametrii lor vor fi discutate mai târziu. Aici este important să înțelegem că prima parte a funcției caută valoarea stocată în memoria cache a obiectelor și o emite dacă este găsită. Dacă nu există valori în memoria cache, o găsim interogând baza de date, salvând-o în cache și returnând rezultatul.

Astfel, numai primul apel pentru foo () va executa interogarea din baza de date, iar apelurile ulterioare vor returna rezultatul mult mai repede cu ajutorul cache-ului:

Dacă răspunsul dvs. este "unul", atunci principiul caching-ului obiecte pe care le-ați învățat. Cu toate acestea, răspunsul corect este aici "zero" din cauza particularităților opțiunilor de lucru cu memoria cache a obiectelor din WordPress. Vom discuta detaliile la sfârșitul articolului.

Funcțiile de bază ale cache-ului pentru obiecte

Obiectul Caching din WordPress este implementat de clasa WP_Object_Cache. Dar este ușor să-i accesi metodele prin funcții auxiliare.

wp_cache_get ()

Funcția wp_cache_get () citește valoarea din memoria cache a tastei date. Dacă valoarea cu o astfel de cheie nu există, wp_cache_get () returnează false. Parametrii funcției:

  • Cheie $ - cheia pentru căutare
  • $ group - grupul în care se efectuează căutarea, dacă grupul nu este specificat, grupul implicit "implicit" este asumat, parametrul este opțional

Există, de asemenea, doi parametri suplimentari în funcția wp_cache_get (), care sunt folosiți extrem de rar.

Parametrul $ found are o variabilă prin referință și o plasează la true sau false. în funcție de valoarea care a fost găsită în memoria cache sau nu. Acest parametru este util când valoarea stocată în memoria cache a obiectelor poate fi Boolean false.

wp_cache_add ()

Funcția wp_cache_add () adaugă o valoare cache-ului pentru o anumită cheie. Dacă valoarea cu o astfel de cheie există deja în memoria cache a obiectelor WordPress, funcția wp_cache_add () nu face nimic și returnează false. Parametrii funcției:

  • Cheie $ - o cheie unică prin care se poate găsi valoarea
  • $ data - valoarea stocată în memoria cache a obiectelor
  • $ grup este un grup care vă permite să utilizați aceeași cheie într-un alt context, valoarea implicită este "implicită", parametrul este opțional
  • $ expire - durata maximă de viață a valorii în cache, este utilizată numai în unele pluginuri de cache externe de obiecte, parametrul nu este obligatoriu

wp_cache_set ()

Funcția wp_cache_set () este similară cu wp_cache_add () și ia aceiași parametri. Salvează valoarea specificată în memoria cache a obiectelor WordPress. Singura diferență este că funcția wp_cache_set () stabilește valoarea în memoria cache, chiar dacă aceasta există deja. Dacă nu există valoare în memoria cache, wp_cache_set () o va adăuga.

wp_cache_replace ()

Funcția wp_cache_replace () este, de asemenea, similară cu wp_cache_add () și wp_cache_set (). și acceptă aceiași parametri. Funcția wp_cache_replace () înlocuiește valoarea existentă în memoria cache a obiectelor. Aceasta diferă prin faptul că, dacă valoarea nu este găsită în cache-ul de obiecte, funcția nu va fi adăugată la noua valoare.

wp_cache_delete ()

Funcția wp_cache_delete () elimină valoarea din memoria cache a unei chei date. Parametrii sunt aceiași cu funcția wp_cache_get (). Funcția returnează true dacă valoarea a fost găsită și ștersă, altfel falsă. exemplu:

wp_cache_incr () și wp_cache_decr ()

Funcțiile wp_cache_incr () și wp_cache_decr () vă permit să creșteți sau să micșorați valorile din memoria cache a obiectelor. Aceste funcții sunt utile în special atunci când lucrați cu orice contor. exemple:

wp_cache_flush ()

Funcția wp_cache_flush () resetează întreaga memorie cache a obiectelor WordPress. Utilizați această caracteristică cu o atenție deosebită, deoarece poate duce la o performanță scăzută a WordPress.

Cache constant de obiecte

Unul dintre punctele cheie ale memorării obiectelor în WordPress este că, în mod implicit, memoria cache este instabilă. Aceasta înseamnă că toate valorile din memoria cache sunt stocate doar pentru o singură interogare, iar data viitoare când pagina dvs. WordPress este solicitată, cache-ul de obiecte este gol din nou.

La prima vedere, acest cache nu este foarte util, dar dacă numărați de câte ori WordPress efectuează funcția get_option () într-o singură cerere. atunci avantajul din obiectele de caching devine evident.

De asemenea, în WordPress există posibilitatea de a utiliza stocarea externă pentru memoria cache a obiectelor, de exemplu, serverul Memcached sau APC, în timp ce memoria cache a obiectelor din WordPress devine permanentă. Aceasta înseamnă că data viitoare când accesați pagina dvs., vor deveni disponibile valorile stocate anterior.

Cache de obiecte externe permanente

Cache-ul de obiecte extern / persistent în WordPress este implementat exclusiv ca plug-in, de exemplu:

Aceste plug-in-uri vă permit să utilizați serverele Memcached, APC sau Redis, respectiv pentru cache-uri în WordPress. Când utilizați cache-ul extern, trebuie să aveți și o idee despre cât de multă memorie va fi necesară pentru cele mai frecvente obiecte pentru configurarea corectă a serverului de stocare.

Dacă dezvoltați un plugin pentru WordPress, în care comportamentul depinde de prezența cache-ului extern al obiectului, utilizați funcția wp_using_ext_object_cache ():

În acest exemplu simplu, stocăm valoarea în memoria cache a obiectelor numai dacă cache-ul este extern și persistent. Dacă pluginul nu există pentru cache-ul extern al obiectelor, atunci opțiunea va fi utilizată.

Când lucrați cu pluginuri cache externe de obiecte, apare un nou concept de "cache de obiecte locale". Aceasta înseamnă că atunci când solicitați în mod repetat aceeași cheie, memoria cache nu va re-interoga serverul Memcached, ci va returna o valoare din memoria cache locală.

Unele pluginuri externe de cache implementează parametrul de forță $ cu care puteți afecta acest comportament.

Cele mai multe funcții de cache al obiectelor au opțiunea grupului $. care vă permite să utilizați aceeași cheie în diferite contexte.

Teoretic acest lucru este doar un prefix opțional la cheie, dar, în practică, grupuri sunt de o mare importanță atunci când se lucrează cu WordPress în modul de rețea (multisite), fie prin utilizarea unui plug-in-uri externe pentru obiectele de stocare în cache.

Kernelul WordPress utilizează mai multe grupuri diferite, de exemplu:

Grupurile din WordPress sunt împărțite în globale și non-globale, precum și permanente și non-permanente.

Grupuri globale

Grupurile globale din WordPress se referă numai la lucrul cu WordPress în modul de rețea. În mod implicit, cache-ul de obiecte adaugă un prefix cu id-ul site-ului curent (id-ul blogului) pentru fiecare cheie din memoria cache a obiectelor.

Cel mai evident exemplu al unui grup global în WordPress este grupul "utilizatori", deoarece utilizatorii din WordPress sunt preluați dintr-o tabelă globală, indiferent de site-ul curent din rețea. Alte exemple de grupuri globale sunt: ​​"teme", "detalii blog", "site-opțiuni", "site-tranzitor".

Dacă doriți, puteți adăuga propriul grup în lista grupurilor globale utilizând funcția wp_cache_add_global_groups ():

Grupuri constante

Grupurile constante din memoria cache a obiectelor WordPress sunt acele grupuri care utilizează cache extern de obiecte permanente, în prezența unui plug-in. Cu excepția cazului în care se specifică altfel, fiecare grup este implicit implicit și puteți utiliza funcția wp_cache_add_non_persistent_groups () pentru a exclude un grup din cele persistente:

Astfel, atunci când funcționează cu un dop din cache-ul extern, de exemplu Memcached Object Cache, și stocarea valorilor în grupul «mi-grup», valoarea va fi stocată numai în memoria cache obiect local, și nu va rămâne pe serverul Memcached.

În miezul WordPress, în mod implicit, sunt definite mai multe grupuri neregulate: "comment", "counts", "themes" și "plugins". Toate celelalte grupuri, inclusiv grupul "implicit" din WordPress, sunt permanente.

Dezactivarea cache-ului pentru obiecte

Când aveți nevoie pentru a obține date folosind WordPress built-in functii, dar nu salvează datele din memoria cache, puteți dezactiva temporar adăugarea funcției de cache folosind wp_suspend_cache_addition (). Acest lucru poate fi util, de exemplu, atunci când importă o cantitate mare de date:

În mod similar, folosind wp_suspend_cache_invalidation (), puteți dezactiva posibilitatea de a reseta memoria cache, cu toate că în acest moment această funcție funcționează numai pentru intrările cache, și numai atunci când încercați să-l resetați utilizând funcția clean_post_cache ().

Obiectul cache și opțiuni

Opțiunile din WordPress au o relație specială cu memoria cache a obiectelor. Acest lucru este ușor de văzut în implementarea get_option (). care la primul apel va apela funcția încorporată wp_load_alloptions (). care la rândul său vor încărca toate opțiunile marcate cu autoload în baza de date WordPress.

Primul get_option timp funcția () se numește WordPress nucleu înainte de a fi încărcate subiectul nostru activ, și de aceea, atunci când se referă la get_option () pentru a obține un nume de site-ul, descriere, etc, cererile nu va fi nici o bază de date:

Acest cod nu va executa nici o interogare în baza de date WordPress.

Din acest motiv, tema și dezvoltatorii de plugin-uri WordPress nu ar trebui să se teamă de astfel de funcții ca get_option (). bloginfo (). sau get_post_meta () (o abordare similară cu cache), și sfatul de a „elimina referire la get_option (), în scopul de a accelera site-ul“ poate fi ignorat în condiții de siguranță.

concluzie

În depanarea problemelor legate de cache-ul de obiecte din WordPress, plug-in-ul popular Debug Bar vă va ajuta.

Caching obiecte în wordpress - revista wp

Lucrul cu memoria cache a obiectelor din bara de depanare

În bara de depanare, puteți vedea statisticile privind accesul la memoria cache a obiectelor și memoria consumată de fiecare grup și dacă există cache-uri externe de obiecte, bara Debug va afișa fiecare acces la serverul extern.