Utilizarea memoriei la interogarea utilizatorilor
Am o mică problemă cu una dintre interogările mele aici. Nu pot crește limita de memorie WordPress deoarece HostGator o setează la 64MB. Nu sunt sigur dacă este posibil să reduc cantitatea de memorie utilizată făcând unele modificări în codul meu, iată codul pe care îl folosesc pentru a interoga utilizatorii dintr-un anumit rol și pentru a afișa numele, profilul și avatarul lor:
<?php $users = get_users('role=s2member_level3'); ?>
<?php foreach ($users as $user) {
$avatar = get_avatar($user->ID, '96');
if (get_the_author_meta('description', $user->ID) == "" && stristr($avatar,"gravatar.com/avatar")) { continue; }
?>
<div class="colaborador">
<div class="imagem-colaborador">
<?php if ($avatar == "") {
echo '<img src="http://1.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s=96" alt="Avatar" title="Avatar implicit" />';
} else {
echo $avatar;
} ?>
</div>
<div class="texto-colaborador">
<h2 class="nome-colaborador"><?php echo $user->display_name; ?></h2>
<p><?php the_author_meta('description', $user->ID); ?></p>
</div>
</div>
<?php } ?>

În exemplul tău, obții toate câmpurile în apelul get_users, dar folosești doar câmpurile ID și display_name. Astfel, poți economisi memorie forțând get_users să returneze doar câmpurile de care ai nevoie.
$users = get_users(array(
'role'=>'s2member_level3',
'fields'=>array('ID', 'display_name'),
));
Aceasta va ajuta la reducerea consumului de memorie.

Ai putea economisi puțină memorie prin obținerea câmpului user_email și transmiterea acestuia direct în funcția get_avatar în loc de ID-ul utilizatorului.

Mai mult, verificarea ta pentru $avatar fiind gol este inutilă, deoarece get_avatar va returna întotdeauna o adresă URL validă pentru avatar. Deci apelul tău la stristr este, de asemenea, inutil și consumă memorie fără niciun motiv.

Hei Otto, tocmai am aflat și am eliminat această linie hehe, dar problema cu memoria încă persistă. Am încercat și să folosesc paginare, dar fără succes. Mă gândesc să schimb adresa implicită a avatarului, astfel încât să încarce o imagine de pe localhost-ul meu, crezi că va face vreo diferență?

Apelarea datelor autorului
În loc să folosești multiple apeluri get_the_author_meta()
, poți utiliza un singur apel $author_data = get_userdata( $user_id );
. Apoi poți extrage toate datele din obiect, de exemplu $author_data->ID;
. Acest lucru ar trebui să economisească memorie.
Avatar
Dacă renunți la afișarea avatarului, vei economisi multă memorie. Avatarii necesită mult timp pentru încărcare și utilizează o cantitate mare de memorie.

Ce zici de funcțiile legate de avatar care folosesc multă memorie de server?..

Tocmai am verificat ieri cum folosește avatarul memoria (prin bara de dezvoltator Chrome). Nu înțeleg cu adevărat de ce, dar se pare că este ceva în legătură cu asta.

de fapt avatarul este principalul lucru despre această pagină, din păcate. Dar voi încerca sugestia ta Kaiser, nu sunt sigur dacă va funcționa, dar hai să încercăm. Mulțumesc!

Nu înțeleg. Cum afișează Chrome utilizarea memoriei PHP? Dintr-un test rapid, apelul get_avatar()
crește utilizarea memoriei cu 88 de octeți.

Cum ai testat? Sunt complet nou în instrumentele de dezvoltare Chrome și nu pot repeta ce am încercat ieri. Nu știu cum am găsit asta...

@Vito Argos: Deci mem_usage = ~88 bytes x XY utilizatori
. Câți utilizatori ai?

Avatarurile nu folosesc memorie reală pe server. Asta este doar în browser. Nu-ți face griji pentru asta.

Kaiser, am 61 de utilizatori, dar afișez doar pe cei care au avataruri atașate profilului lor (16), numărul va crește în timp.
@Otto, deci ce ar putea folosi cea mai mare parte a memoriei? Apropo, când elimin avatarurile pagina se încarcă perfect, toți utilizatorii sunt afișați.

Când dezactivez plugin-ul meu de newsletter, acest mesaj este afișat pe pagina listei de utilizatori: Eroare fatală: Memorie insuficientă (alocat 68943872) (încercat să aloce 16000 de octeți) în /home/organo/public_html/wp-includes/media.php la linia 254
