DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   PHP optimizacija (http://www.devprotalk.com/showthread.php?t=1011)

bluesman 15. 05. 2006. 18:28

PHP optimizacija
 
Naleteo sam na interesantan članak sa nekim primerima optimizacije PHP koda, da li je neko od vas merio nešto slično. Neki rezultati su očekivani (recimo str_replace vs reg exp za stringove) ali me (blago) iznenadjuju neki drugi.

Članak je ovde: http://blogs.hackerscenter.com/dcrab/?p=9

Bojan Zivanovic 15. 05. 2006. 21:44

Za include sam znao da usporava kod, al ipak, prednosti su mnogo vece od mana (ko zeli da odrzava index.php koji ima 5000 linija koda)..
Takodje jedna od cestih gresaka kod pocetnika:
PHP kôd:

while($i count($array)) {
 
// radi nesto


Dakle ako $array ima 100 clanova, ciklus ce 100 puta izracunati broj clanova niza,pa izvrsiti kod... Dakle, mnogo pametnije je uraditi ovako nesto:
PHP kôd:

$cnt count($array);
while(
$i $cnt) {
 
// radi nesto


Naravno, najvise vremena u izvrshavanju skripte ode na rad sa bazom i fajlovima, tako da te delove treba najvise optimizirati..
Ipak, to je prica za sebe.
Za reference znam da je nesto promenjeno u PHP5, al nisam siguran sta..
Verujem da ima veze sa objektno orjentisanim programiranjem, tako da savet naveden u clanku i dalje stoji...
Kao i sigurnost, optimizacija oduzima najmanje vremena ako se neke stvari odrade kako treba na samom pocetku.
Naravno, op code cache-eri kao sto je PHPAccelerator i i sl mnogo pobojsavaju performanse, i prava je glupost ne koristiti ih kod vecih projekata.

Dobar link iz online knjige pomocu koje sam se ja upoznao sa php-om:
http://hudzilla.org/phpbook/read.php/18_0_0
Vecina vas sigurno zna vecinu ovih saveta (lakse sa funkcijama, keshiranje..), al nije lose pomenuti...

dinke 15. 05. 2006. 22:57

Iskreno, ocekivao sam vise od jednog clanka o optimizaciji. Prvo, razocaran sam samom benchmark metodom (microtime vs. xdebug na primer). Drugo, autor teksta nije ni zagrebao temu optimizacije, a primeri su uglavnom lose izabrani.

Posto je ovo pro forum a moja malenkost moderator PHP foruma, evo sta je autor u gornjem clanku propustio.

1) "Premature optimization is the root of all evil." (Donald E. Knuth)
2) "When developing applications, the first stage should be to make design your top priority; we should sacrifice performance in favor of a well designed application architecture, and allow our code to be flexible and maintainable. In general, assuming you haven’t made any critical mistakes in your code, performance is really a hardware issue (i.e. you have the option to throw memory,faster processors etc. at the problem);" (Harry Fuecks)
3) "Fast programmers cost more than fast microprocessors!" (Harry Fuecks)

A sada evo i nekih tehnika:

- Most Probably First:
Kod koriscenja if-else uslova, u prvi if uvek treba stavljati uslov koji će se verovatnije izvršiti. Na primer ako imamo $foo_boolean za koji znamo da će prilikom izvršavanja scripta skoro sigurno biti true onda treba :

PHP kôd:

if($foo_boolean === true)
{
    
//do foo
}
else
{
   
//doo foo else


- For Loop
Kao što Bojan reče, unutar for i while petlji ne stavljati count već van njih. Dakle ne:

PHP kôd:

for($i=0$i<count($foo_array); $i++)
{
    
//do foo


već

PHP kôd:

$count count($foo_array);
for(
$i=0$i<$count$i++)
{
    
//do foo


- Lazy Inclusion
Već smo videli koliko "košta" jedan include praznog fajla. Zamislite tek include neke klase (ili više njih). U slučaju da nam to nije neophodno možemo koristiti tzv "Lazy Inclusion":

PHP kôd:

<?php
class LazyInclude 
{
    var 
$session;
    
    function 
LazyInclude()
    {
        
// Include the class as it's needed
        
require_once 'Session/Session.php';
        
$this->session = &new Session();
    }
}
$li = new LazyInclude();
?>

(primer preuzet iz php anthology 2)

- Use Single Quotes
Negde sam ovo pročitao, a negde i da je to jedna od urbanih legendi. Elem, po nekima, korišćenje jednostrukih navodnika je brže (što donekle ima smisla jer onda engine ne traži escape karaktere).

- Encode Script
Encodovan script (http://www.zend.com/products/zend_guard) radi oko 100% brže.

dinke 15. 05. 2006. 23:02

Citat:

Originalno napisao Bojan Zivanovic
Za reference znam da je nesto promenjeno u PHP5, al nisam siguran sta..

Promenjeno je to da se objekti uvek prosleđuju po referenci, što nije bio slučaj kod PHP4. Ovo je naročito bio problem kod PHP4, što je rešavano tehnikom korišćenja & operatora (neki bi tehniku nazvali i "Way Too Many Ampersands". :)

bluesman 15. 05. 2006. 23:44

Citat:

Originalno napisao dinke
Iskreno, ocekivao sam vise od jednog clanka o optimizaciji. Prvo, razocaran sam samom benchmark metodom (microtime vs. xdebug na primer). Drugo, autor teksta nije ni zagrebao temu optimizacije, a primeri su uglavnom lose izabrani.

Ma da, nebitno, samo mi je članak poslužio kao šlagvort :) Recimo nisam mislio da je brže

PHP kôd:

for ($i 0$i $n$i++)
{
    echo 
$i;


od

PHP kôd:

$s '';
for (
$i 0$i $n$i++)
{
    
$s .= $i;
}
echo 
$s

Ne zvuči logično pošto browser ionako ne prikazuje ništa dok se ne parsuje ceo script (osim ako mu ne purge-uješ ouptut ručno).

Citat:

Originalno napisao dinke
- Use Single Quotes
Negde sam ovo pročitao, a negde i da je to jedna od urbanih legendi. Elem, po nekima, korišćenje jednostrukih navodnika je brže (što donekle ima smisla jer onda engine ne traži escape karaktere).

Da, ovo je urbana legenda, ali mislim da je na 100 mesta pokazano da je razlika toliko zanemarljiva da i ne može da se prihvati kao neka optimizacija.

Ilija Studen 16. 05. 2006. 00:12

' vs " - trik je u tome što parser ne juri kroz string unutar single quotes u potrazi za promenljivima. Primer:

PHP kôd:

$string 'neka vrednost';
echo 
'bla bla $string'// bla bla $string
echo "bla bla $string"// bla bla neka vrednost 

Diskutabilno je koliko ovo stvarno utiče na performanse, ali je korišćenje single quotes brže. Nije urbana legenda...

Što se includeova tiše __autoload() kod PHP5 je pravo blago. Plus pogledajte i SmartLoader. Najelegantije rešenje za include klasa koje sam video. Bukvalno me više nije briga gde su mi klase...

bluesman 16. 05. 2006. 00:25

You lazu SOB :) Zar ti nisu klase na jednom mestu? Zar je toliko problem zapamtiti jedan path? :)

ppavlovic 16. 05. 2006. 00:31

Evo jos jedne optimizacije, ali od coveka koji ne gleda da izvuce po neku mikrosekundu vec malo vise.

http://phplens.com/lens/php-book/opt...ugging-php.php

Ovo mu je bio prvi chapter knjige koju je poceo da pise, ali je posle toga uvideo da i nije pisac. Steta... Programer!

ppavlovic 16. 05. 2006. 00:33

Hm... Evo jos jednog clanka/prezentacije:

http://talks.php.net/show/yul/24

ivanhoe 16. 05. 2006. 01:02

mozda nije veliki gubitak u perfomansama kod upotrebe " umesto ', ali on svakako postoji, jer php ima vise posla. Ako se uzme u obzir da je veliki deo koda obicno neki posao sa stringovima, onda se ti gubici pomnoze bar x50 u skripti prosecne duzine. A kljucno pitanje je zasto koristiti navodnike uopste?
Ok ako zaista imas neke promenjive pa je lakse za pisanje, tome i sluzi...ali jako cesto mogu da se vide primeri gde se koristi iskljucivo ".." za obican plain text. Koja je tu logika ? Cista bahatost sa resursima...


Vreme je GMT +2. Trenutno vreme je 07:30.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.