Autentificare
facebook MW pe Facebook
twitter MW pe Twitter
© Mobilewave.ro
versiunea desktop
Inițiator acum 11 ani
JokerBoy
MW Addicted
Ultimul acum 10 ani
JokerBoy
MW Addicted
Cauta in topic
Unelte topic
Dacă vă place acest articol trimiteți mai departe!

Optimizarea codului scris in PHP

55 324 vizualizări
3 răspunsuri
autor subiect #1
JokerBoy
MW Addicted
4952 mesaje
din 21/07/2005
21 aprecieri
04 februarie 2009, 02:42:48 • actualizat 05 februarie 2009, 12:22:01 (2 ori)
Numele topicului spune tot.

Pentru inceput voi incepe eu cu niste exemple. :)

1. Dupa cum stiti, echo e mai rapid ca print, si 2 exemple de echo:

echo 'id: ',$id,' , valoare: ',$valoare;

e mai rapid ca

echo 'id: '.$id.' , valoare: '.$valoare;

si folosesc ' , si nu " pentru ca si asta se presupune a fi o optimizare, cautandu-se dupa variabile intre " " si nu intre ' '.

dar $var=""; e mai rapid ca $var='';

mysql_fetch_array vs mysql_fetch_assoc vs mysql_fetch_row

mysql_fetch_array e mysql_fetch_assoc+mysql_fetch_row, deci dublu de date pe care le ceri din baza de date:

Array
(
[0] => 1
[id] => 1
[1] => etc
[valoare] => etc
)

mysql_fetch_assoc returneaza un array unde fiecare key este numele campului extras dintr-un tabel anume.

Array
(
[id] => 1
[valoare] => etc
)

mysql_fetch_row returneaza un array unde key-urile sunt numerice, si corespund fiecarui tabel extras in functie de selectarea informatiilor din baza de date.

'SELECT id,valoare FROM tabel'

Array
(
[0] => 1
[1] => etc
)

dintre toate acestea eu folosesc fetch_row, datoritata informatii mai putine cerute de la baza de date.

si cand extrageti ceva din baza de date mereu indicatii in query ce campuri doriti, deci

'SELECT id,valoare FROM tabel'

e mai rapid ca

'SELECT * FROM tabel'

++$i e mai rapid ca $i++ cu ~10%

while vs for

$i=0;
while($i<10000) {
echo $i.' ';
++$i;
}

for($i=0;$i<10000;++$i) {
echo $i.' ';
}

cu ajutorul functii memory_get_usage() putem vedem foarte clar ca while() consuma mai putine resurse ca for(), si daca punem la inceput paginii de testat $start=microtime(); si la urma $stop=microtime() echo ($stop-$start); vedem de asemenea iar ca while e mai rapid ca for(). demn cateva secunde,dar conteaza.

selectarea din mai multe tabele se poate face cu mai multe tipuri de JOIN-uri: INNER JOIN, LEFT JOIN, RIGHT JOIN, NATURAL JOIN, CROSS JOIN,etc..

pt ca LEFT JOIN mi s`a parut cea mai rapida, va voi da un exemplu de query cu LEFT JOIN:

'SELECT tabel1.id,tabel2.valoare FROM tabel1 LEFT JOIN tabel2 ON (tabel1.id=tabel2=id)'

include,include_once,require si require_once

diferenta dintre include si require e ca include daca nu gaseste fisierul respetiv merge in continuare pe cand require daca nu gaseste fisierul da o eroare fatala. daca puneti include_once sau require_once cu acelasi fisier de inclus de mai multe ori il va include doar o singura data,dar consuma ceva resurse, deci include/require merg mai bine ca include_once/require_once. cel putin eu folosesc require si se simte diferenta cand umbli cu multe fisiere de inclus. si introduceti toata calea spre fisier ca sa nu mai stea OS-ul sa descifreze caiile.

variabilele statice pot fi de 2 ori mai rapide ca cele globale,deci incercati sa nu folositi global decat numai cand nu aveti incotro.

dati unset() la array`urile de care nu aveti nevoie.

si ar mai fi,dar e tarziu. asa ca o voi lasa pe alta data, sau poate vor scrie si altii ceva optimizari ale codului PHP.  :P
Publicitate
Publicitate
#2
modoran
MW Addicted
7605 mesaje
din 26/01/2006
33 aprecieri
04 februarie 2009, 09:46:49
Legat de echo si print, atunci cand aveti un text mai lung de trimis spre browser, cel mai rapid este pur si simplu sa opriti parserul php in acel loc, urmand sa-l folositi doar pt afisarea variabelelor. Se obtin timpi aproape zero de generare a paginii.
autor subiect #3
JokerBoy
MW Addicted
4952 mesaje
din 21/07/2005
21 aprecieri
06 februarie 2009, 17:15:16
foarte bine modoran!  :D

si ca o idee, pt cei care vor sa inteleaga cum lucreaza mai exact join`urile aveti aici niste imagini demonstrative,si foarte utile.  :D
autor subiect #4
JokerBoy
MW Addicted
4952 mesaje
din 21/07/2005
21 aprecieri
01 iulie 2010, 11:49:26 • actualizat 01 iulie 2010, 11:50:45 (2 ori)
"SELECT * FROM `tabel` GROUP BY DATE_FORMAT(FROM_UNIXTIME(timp),'%Y-%m-%d')"

rezultatele fiind grupate dupa an-luna-zi. mai multe aici:
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

PS: nu e o optimizare, ci doar un exemplu cum sa te folosesti mai practic de interger-ul rezultat dupa urma folosirii functiei time();
Înapoi la Creative Corner
cine e aici?
Subiectul a fost creat la .
versiunea desktop
0.016⋅4⋅0