Home > PHP > 10 saveta za optimizaciju PHP koda

10 saveta za optimizaciju PHP koda

Postoji mnogo načina kako možete da optimizujete svoj PHP kod. U ovom tekstu ćemo izdvojiti nekoliko metoda koje se jančešće koriste u programiranju.

1. Petlje

Ne postoji prorogram koji u svom radu ne koristi petlje. One nam omogućavaju da određeni deo koda ponovimo. Sa druge strane one su magnet za ubijanje efikasnosti, jer svaka i najmanja greška koja se u okviru njih napravi, automatski se množi sa brojem ponavljanja i može postati poprilično velika greška. U okviru PHP-a postoji više načina kako možete da realizujete petlje: for, foreach i while. Među njima je for petlja je najbrža. Ipak, i kod nje je potrebno voditi računa, primer:

// Upotreba funkcije koja daje broj elemenata niz u okviru dela za uslov
// daje gore perfomanse nego foreach i while petlje
for($i = 0; $i < count($array); $i++) {
  echo 'Ovo je loše';
}
 
// Mnogo bolja primena
for($i = 0, $ci = (int)count($array); $i < $ci; $i++) {
  echo 'Ovo je mnogo bolje';
}

Razlika je u tome što u prvoj petlji, svaki put kada proveravate da li je petlja postigla maksimalan broj ponavljanja, koristite funkciju koja daje broj elemenata niza. Na taj način funkciju aktivirate onoliko puta koliko prođete kroz petlju.
U drugom primeru je funkcija „izvučena“ u okviru dela koji se koristi za definisanje inicijalnih vrednosti tako da se funkcija poziva samo jednom bez obzira koliko puta prođete kroz petlju.

Drugi primer, bi bio upotreba petlje i uslova:

// Upotreba uslova unutar petlje
$ok = true;
for($i = 0; $i < 10; $i++) {
  if ($ok)
    echo 'Ovo je OK';
  else
    echo 'ovo nije OK';
}
 
// Mnogo bolja primena
$ok = true;
if ($ok) {
  for($i = 0; $i < 10; $i++) {
    echo 'Ovo je OK';
  }
} else {
  for($i = 0; $i < 10; $i++) {
    echo 'Ovo je nije OK';
  }
}

Razlika je u tome što u prvoj petlji svaki put kada prođete kroz petlju postavljate uslov, u drugom primeru prvo postavite uslov i u zavisnosti od toga pristupate određenoj petlji koja obavlja svoj zadatak. Pri tome treba voditi računa da je uslov moguće staviti van petlje samo ukoliko u okviru nje ne postoji promenljiva na koji utiče petlja.

2. Jednostruki i dvostruki navodnici

U većini slučajeva nije bitno šta koristimo, pošto u okviru njih navodimo tekst koji koristimo dalje u kodu, ali nije baš tako. Razlika je u tome što je u okviru dvostrukih navodnika moguće ubaciti promenljive i PHP će ih uredno obraditi i na njihovo mesto ubaciti njihove vrednost što nije slučaj kod jednostrukih navodnika. Upravo iz tog razloga je upotreba jednostrukih navodnika mnogo brža. PHP-u se u startu naglašava da u okviru teksta ne postoji sadržaj koji je potrebno dodatno obraditi i ceo kod se brže izvršava. Koristite dvostruke navodnike samo kada imate potrebu za tim.

3. Pre increment i Post increment

Inkrementacija, odnosno povećavanja vrednosti za jedan se u okviru PHP programskog jezika može izvršiti na više načina, kao i u svim jezicima koji su proistekli iz C programskog jezika.

$i++;
$++i;
$i += 1;
$i = $i + 1;

U svim navedenim primerima, krajnji rezultat je isti, ali to ne znači da im je potrebno isto vreme za izvršavanje. Najbrže se izvršavaju pre i post inkrement, ali i izmenju njih je pre inkrement za oko 10% brži.

4. Apsolutne i relativne putanje

Apsolutne putanje su takođe poznate i kao kompletne putanje i gledano sa strane PHP-a one su bolje rešenje. Relativne putanje lako mogu da naprave problem prilikom korišćenja include i require operacija. Ono bitnije je da upotrebom apsolutnih putanja eliminišete potrebu da server rešava putanju umesto vas.

5. Echo i Print

Gledano sa strane benchmark testova, Echo je za oko 12-20% brži ukoliko se ne nalazi $ simbol u tekstu, a oko 40-80% ukoliko se $ simbol nalazi u tekstu.

6. Spajanje tekstova sa tačkom i zapetom

Između tačke (.) i zapete (,) koji koristiti za spajanje tekstova i promenljivih? Ja uglavnom koristim tačku ali kada sam pogledao testove na ovoj lokaciji i nisam siguran da je to uvek najbolje. Ono što se može zaključiti je da je bolje koristiti tačku ukoliko je u pitanju spajanje tekstova, ali ukoliko koristite i promenljive u tom spajanju, bolje je koristiti zapetu.

7. str_replace(), preg_replace() i ereg_replace()

U pitanju su 3 funkcije koje možete koristiti za pretragu teksta i izmenu nekog njegovog dela. Između njih, ukoliko nemate potrebe za naprednim pretraživanjem, najbolje je koristiti str_raplace(). Razlog je što ova funkcija ne koristi nakakve napredne izraze kao što je to moguće u preg_replace() i ereg_replace(). Ipak, kada je potrebno izvršiti zamenu nekoliko znakova u okviru teksta, mnogo je praktičnije koristiti jedan preg_replace() nego ponavljati str_replace() za svaki od njih.

8. explode() i preg_split()

Može se reći da je analiza ove dve funkcije identična prethodnoj tački. Funkcija explode je definitivno brža jer u okviru sebe nema mogućnost unošenja regularnih izraza, tako da uvek koristite nju kad god vam okolnosti to omogućavaju. Što bi rekao moj profesor – nema potrebe na vrapca pucati iz topa, dovoljna je puška (i to ona vazdušna), ubiće te ga verovatno i topom, ali će te zasigurno razneti i drvo na kome se on nalazi.

9. list() i [0]

Da li ste uopšte koristili nekada funkciju list()? Ja je koristim uglavnom kada je potrebno da mi funkcija vrati više vrednosti pa ih tom prilikom spakujem u niz i vratim niz, a onda je „dočekam“ ovom komandom. Primer:

function test()
{
  // some code here...
 
  return array(1, 'test', true);
}
 
list($number, $text, $logic) = test();

Ono što je interesantno je da je ovu funkciju poželjno korstiti kada god želite da promenljivoj dodelite vrednost nekog elementa niza jer možete dobiti na ubrzanju i do 90% (na toj jednoj funkciji naravno). Primer:

list ($v) = $GLOBALS['array'];
// vs.
$v = $GLOBALS['array'][0];

10. else if i elseif

Sigurno vam se desilo da u programiranju morate, u zavisnosti od više različitih uslova, da izvršite određeni deo koda. Tom prilikom je bolje koristiti elseif od običnog else if jer možete dobiti na uštedi i do 50% prilikom izvršavanja. Primer:

if ($GLOBALS['dummy_false'])
  $GLOBALS['dummy_false'] = true;
else if ($GLOBALS['dummy_true'])
  $GLOBALS['dummy_true'] = true;
// vs.
if ($GLOBALS['dummy_false'])
  $GLOBALS['dummy_false'] = true;
elseif ($GLOBALS['dummy_true'])
  $GLOBALS['dummy_true'] = true;

Ovo su samo neke optimizacije koje možete uraditi na svom kodu, ukoliko vas zanima kompletnija slika koja obuhvata precizne informacije koliko će te dobiti optimizovanjem određenog dela koda, pogledajte testove na ovoj lokaciji

Categories: PHP Tags: ,
  1. No comments yet.
  1. No trackbacks yet.