• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Google – Hai să facem web-ul mai rapid în PHP

9
  • Publicat de Andrei Avădănei
  • în Fără categorie
  • — 3 iun., 2011 at 2:15 pm

Google e declarată în mod indirect una dintre cele mai importante companii internaţionale care încurajează dezvoltarea unor aplicaţii cât mai optimizate şi mai rapide. Acest fapt s-a văzut de-a lungul timpului prin uneltele realizate de ei, prin modificările ce le-au suferit algoritmii ce stau la baza motorului de căutare dar şi prin articole în care sunt prezentaţi diferiţi paşi pentru a scrie cod mai optimizat. Eric Higgins, unul dintre webmasterii de la Google a scris un articol ce cuprinde o serie de sfaturi utile pentru a optimiza experienţele utilizatorilor. Acesta s-a axat exclusiv pe PHP, unul dintre cele mai populare limbaje de programare în randul dezvoltatorilor web.

Profilează codul

De cele mai multe ori, ajungem să optimizăm aplicaţiile web abia după ce ne confruntăm cu probleme de stabilitate. Problema e că atunci suntem nevoiţi să optimizăm, dar nu prea ştim ce. Una dintre cele mai bune abordări în astfel de situaţii este profilarea aplicaţiilor. Vă recomand in xDebug.

Actualizează versiunea PHP

Îmbunătăţirile şi optimizările apar o dată cu fiecare nouă versiune PHP. E o abordare elegantă şi eficientă să vă aflaţi la zi cu versiunea PHP.

Migrarea de la PHP 4 la PHP 5.0.x
Migrarea de la PHP 5.0.x la PHP 5.1.x
Migrarea de la PHP 5.1.x la PHP 5.2.x

Folosiţi cache

Google recomandă să folosim module de caching precum MemCached sau sisteme de template-uri care suportă cache precum Smarty.

Jucaţi-vă cu bufferele pentru output

PHP foloseşte nişte buffere ce stochează în memorie tot ce va urma să fie afişat. Acestea nu trimit nimic browserului până în momentul în care acesta nu se încarcă. Din fericire, PHP suportă şi câteva îmbunătăţiri în acest sens (funcţiile de flush). Mai multe detalii aici.

Evitaţi folosirea unor funcţii de set şi get evidente

Renunţaţi la folosirea unor funcţii naive de setare a unor variabile atunci când realizaţi clase, precum cele din exemplul de mai jos. Este indicat să accesaţi direct funcţiile pentru că vă poate aduce o îmbunătăţire de 100% a vitezei pe acele acţiuni.

class dog {
  public $name = '';

  public function setName($name) {
    $this->name = $name;
  }

  public function getName() {
    return $this->name;
  }
}

Aşa nu!

$rover = new dog();
$rover->setName('rover');
echo $rover->getName();

Aşa da

$rover = new dog();
$rover->name = 'rover';
echo $rover->name;

Nu copiaţi variabile pentru nici un motiv

Evitaţi folosirea unor variabile suplimentare atunci când nu este cazul. Asta va duce la dublarea cantităţii de memorie folosită. Spre exemplu, dacă utilizatorul trimite un mesaj de 512KB prin parametrul de mai jos, codul va duce la folosirea unui MB de memorie. Gândiţi-vă la cantităţile de informaţii care trebuie să le suporte o aplicaţie web.

Aşa nu!

$description = strip_tags($_POST['description']);
echo $description;

Aşa da!

echo strip_tags($_POST['description']);

Evitaţi executarea unor interogări în cicluri

Una dintre cele mai mari greşeli de logică în accesarea unei baze de date (ce am întâlnit-o şi eu de nenumărate ori) este executarea unor interogări în interiorul unui ciclu, ceea ce duce la o încetinire drastică a scriptului datorită numeroaselor apelări ale bazei de date. Astfel :

foreach ($userList as $user) {
  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
  mysql_query($query);
  }

Produce :

INSERT INTO users (first_name,last_name) VALUES("John", "Doe")

Dar :

$userData = array();
foreach ($userList as $user) {
    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
 }
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
mysql_query($query);

Produce :

INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...

Evitaţi folosirea unor funcţii pentru condiţiile de oprire ale unor cicluri

O altă abordare greşită este folosirea unor funcţii precum strlen, sizeof şamd. în stabilirea punctului de oprire a unui ciclu precum for sau while. Astfel, prima abordare de mai jos este greşită, în vreme ce a doua este cea corectă.

Aşa nu!

for($i = 0; $i<sizeof($arr); $i++)
{
    echo $arr[$i];
}

Aşa da!

$n = sizeof($arr);
for($i=0;$i<$n;$i++)
{
   echo $arr[$i];
}

Ciclurile for sunt cu 38% mai rapide decât cele foreach

Un aspect pe care mi l-a sesizat Roland. A scris un articol detaliat despre această observaţie aici.

Există numeroase alte greşeli care duc la scăderea vitezei unui script PHP. Aştept alte păreri şi observaţii pentru a completa acest articol.

Daca acest articol contine o greseala, selecteaza cuvintele sau fraza gresita si tasteaza combinatia de taste Shift + Enter sau apasa click aici pentru a o raporta. Multumim!

— Andrei Avădănei a scris 1246 articole

Andrei scrie pe worldit.info din vara lui 2011. Este fondatorul Asociatiei Centrul de Cercetare in Securitate Informatica din Romania - CCSIR si coordoneaza DefCamp, cea mai importanta conferinta de securitate informatica & hacking din Europa Centrala si de Est. Andrei ofera in cadrul Bit Sentinel servicii de securitate informatica, penetration testing, security management, recuperarea de pe urma unui atac cibernetic, training-uri si workshop-uri.

  • Articolul anterior FaceNiff – aplicaţie Android ce te ajută să furi conturile de Facebook
  • Articolul următor Cercetător : „Vreau să fac Skype Open Source”

9 Comentarii

  1. pety spune:
    iunie 3, 2011 la 11:10 pm

    1.$n = sizeof($arr);
    2.for($i=0;$i<n;$i++)
    3.{
    4.echo $arr[$i];
    5.}

    Cred ca la linia a 2-a trebuie $i<$n .

  2. Andrei Avădănei spune:
    iunie 4, 2011 la 12:47 am

    Corect. Mersi de observatie. 🙂

  3. kNigHt spune:
    iunie 5, 2011 la 1:16 pm

    Daca nu folosim functii de set si get in clase, nu se pierde principiul de incapsulare al programarii orientate pe obiect?

  4. Dinu spune:
    iunie 6, 2011 la 5:16 pm

    @kNigHt

    Ba da. Ciudat e ca in majoritatea limbajelor pe care le-am folosit accessor si mutator methods imbunatatesc viteza. Nu stiam ca in php e invers.

  5. alessioalex spune:
    iunie 16, 2011 la 10:49 am

    Daca tot vorbim de performanta, ar mai fi de zis ca Nginx e mai rapid ca Apache si ca ar trebui sa folosim Nginx cu php-fpm si poate baze de date NoSql cand e cazul.

  6. Elvis spune:
    iulie 28, 2011 la 3:39 pm

    @Dinu
    In ce limbaj de programare cele doua metode imbunatatesc viteza? Poate un apel de functie (metoda) fi mai rapid decat accesul direct la un atribut?
    In opinia mea, un apel de astfel de metoda va fi intotdeauna (cu exceptia metodelor inline din C++) mai lent decat accesul direct.

    @kNigHt
    exemplul dat are o mica „hiba”. Pentru a permite a doua metoda de acces (cea directa) , atributul name a fost declarat public. In acest caz, este evident ca existenta unei metode get/set este inutila si prima varianta este gresita. Dar, dupa cum spuneai si tu, se pierde incapsularea.
    Eu sincer nu stiu ce vrea sa spuna autorul prin „funcţii de set şi get evidente”. Daca se refera la existenta unei functii set/get pentru membrii publici atunci sunt foarte de acord ca este o greseala. Altfel, tot timpul o functie set sau get va fi „evidenta”, dar are un scop foarte bine definit in POO.

  7. razvan spune:
    august 22, 2011 la 4:40 pm

    Google recomandă să folosim module de caching precum MemCached sau sisteme de template-uri care suportă cache precum Smarty.

    Adica daca folosesc Smarty NU mai are rost sa folosesc MemCached sau cum ?ca eu nu inteleg..

    Si pana la urma Smarty ajuta la scalabilitate sau nu?

    • Andrei Avădănei spune:
      august 22, 2011 la 8:45 pm

      @Razvan Smarty eu un framework. Nu are nicio treaba. Memcached e o treaba iar Smarty e o alta. 🙂

  8. razvan spune:
    august 22, 2011 la 8:47 pm

    pai stiu ca nu au nici o legatura intre ele…dar ajuta la scalabilitate smarti-ul?


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    • imacoolat-curat.ro
      | Published: februarie 3, 2020 - 2:00 am
    • hotel-palace.ro
      | Published: februarie 2, 2020 - 2:00 am
    • www.tahometru.ro
      | Published: februarie 1, 2020 - 2:00 am
    • alexisart.ro
      | Published: ianuarie 30, 2020 - 2:00 am
    • justshop.ro
      | Published: ianuarie 29, 2020 - 2:00 am
    RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • ianuarie 2021
    L Ma Mi J V S D
    « dec.    
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Google – Hai să facem web-ul mai rapid în PHP
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons

Multumim foarte mult ca ne-ai raportat greseala! O vom remedia in cel mai scurt timp posibil.