Executie fisier php cu mii de linii de cod

Aici este locul unde puteti scrie despre orice probleme /intrebari, in limita bunului simt, care nu au legatura cu subiectele din celelalte forumuri, sau cu materialele de pe site.
andras
Mesaje: 430

Executie fisier php cu mii de linii de cod

Salut,
Intrebare de ordin general: este normal ca intr-o pagina (fisier php) sa existe 4000 linii de cod? Sint doar afisari, prelucrarile (configurari, conexiuni, salvari in BD, filtre etc) se fac in alte fisiere php. In ce masura afecteaza viteza de executie si intretinerea? Multumesc

MarPlo Mesaje: 4343
Salut
Viteza de executie a codului php depinde mai mult de instructiunile din el si optimizarea lor decat de numarul de linii de cod.
Executia e afectata mai mult de conexiuni externe, cum ar fi multe conectari si interogari la o baza de date (cu zecile), citire /scriere fisiere externe, cURL, repetitii multiple de instructiuni, precum parcurgeri de date cu for(), wile(), foreach() care au mii de linii.

- De exemplu, fisierul "functions.php" din forumul phpbb are peste 5500 linii de cod, si e destul de rapid.

- Daca vrei sa afli cat a durat executia unui script php, poti folosi acest cod la sfarsitul script-ului:

Cod: Selectaţi tot

// all the script code ...

// show the execution time with microsecond precision
$exc_in = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
echo $exc_in; 

andras Mesaje: 430
Cel mai mult a durat 24.537846088409. E mult, putin? Mie mi se pare cam mult. Aici scriptul trebuie sa faca o renumerotare (intr-un cimp) a fiecarei inregistrari dintr-o tabela de la 1 la n, acum am 281 inregistrari. Am facut astfel BD incit aceste tabele sa nu depaseasca in medie 1000 inregistrari. Totusi ar trebui sa ma gindesc la o optimizare, nu?

MarPlo Mesaje: 4343
E mult 24 de secunde pentru lucru cu 281 inregistrari. Sigur trebuie optimizare, posibil si la structura tabelelor in baza de date, la comenzi SQL, si la codul php.
Optimizarea e o munca ce necesita multa experienta in scriere de coduri, sunt multe detalii care treuie luate in considerare.
De exemplu, nerepetarea apelarii aceleeasi functii cand se stie ca rezultatul e acelasi. Executia unei functii, mai ales in instructiuni repetitive, ia mai mult timp decat preluarea acelei valori dintr-o variabila.
- Un mic exemplu:

Cod: Selectaţi tot

$arr = ['un array', 'cu sute', 'de elemente'];

// parcurgere array, neoptimizat (apeleaza count() la fiecare iteratie)
for($i=0; $i<count($arr); $i++){
  //cod
}

// parcurgere array, optimizat (apeleaza count() o singura data si retine in variabila)
$n_ar = count($arr);
for($i=0; $i<$n_ar; $i++){
  //cod
}
- Sunt multe lucruri care tin de optimizare: eliberarea memoriei de variabile /obiecte care nu se mai folosesc, utilizarea de constante, plus pe partea de interogari SQL (mai multe select-uri /insert-uri se pot face intr-o singura interogare, si altele).
- Daca vei cauta pe internet, sigur gasesti destule materiale despre Optimizare cod PHP, MySQL.

andras Mesaje: 430
Cum blochez o tabela mysql pana face o prelucrare sau o tranzactie? Cauza vitezei mici la acest script este ca la fiecare iteratie trebuie sa caute valoarea minima neprelucrata din alt cimp, min(rang2). Ma gindesc sa extrag la inceput intr-un array cimpurile care ma intereseaza, sa ordonez crescator array-ul dupa cimpul rang2 apoi sa aplic UPDATE intr-o bucla for() cum ai sugerat, dar pentru asta ar trebui sa blochez tabela. Cum fac asta? Multumesc.

MarPlo Mesaje: 4343
Nu prea ma pricep la comenzile mysql. Se poate crea un tabel temp (temporar) cu ce coloane trebui ca sa-l folosesti pentru verificari cu WHERE, sau mai bine retii in php intr-un array cu ID-ul si ce coloana mai trebuie.
- Am vazut ca e si LOCK / UNLOCK TABLES, dar nu le-am folosit ca sa stiu cum functioneaza. E documentatie la adresa:
dev.mysql.com/doc/refman/5.6/en/lock-tables.html

Subiecte similare