internetul Windows. Android

PHP măsoară timpul de execuție al scenariului. Cum să măsurați timpul scriptului pe PHP și de ce aveți nevoie? Valoarea practică a timpului de execuție

Ziua bună, colegii! 🙂.

Astăzi am decis să afectez subiectul ca momentul executării scriptului PHP și definiția acesteia.

Nu voi spune că această necesitate apare în fiecare zi, dar din când în practică există situații când trebuie să obțineți timpul scriptului PHP.

Mai multe ori, într-o astfel de ocupație, dezvoltatorii angajați în codul de refactorizare și optimizarea algoritmilor existenți pot fi prinși atunci când timpul de execuție PHP al scriptului este un factor cheie atunci când alegeți o versiune finală.

Ei bine, și, uneori, numărul de numere necesită manageri și clienți care doresc să afle cât timp va fi necesar pentru o anumită acțiune din Cod.

Prin urmare, am decis să scriu această scurtă notă în care am decis să stabilesc procedura într-o situație similară.

La început ne vom uita la algoritmul pentru a determina timpul de execuție al scriptului PHP și apoi voi da codul cu care va fi implementat.

PHP Executie Script - Algoritm de definiție

Ordinea acțiunilor noastre va fi extrem de simplă:

  1. definim ora serverului curent în cod PHP înainte de a efectua acțiuni prescrise în script;
  2. după ce scenariul este executat, vom recunoaște din nou ora serverului;
  3. calculați diferența de timp PHP între finalizarea executării scriptului și lansarea acestuia.

Valoarea rezultată este doar că va fi timpul de execuție al scriptului PHP care poate fi luat în considerare la optimizarea și alte acțiuni ulterioare.

Timpul de funcționare a scriptului PHP - Implementarea algoritmului

Pentru a ieși din ora curentă în codul PHP am decis să folosesc funcția PHP standard microtime ()care returnează ștampila de timp curentă în format Unix cu microsecunde.

De ce o astfel de precizie?

Apoi, pentru a prinde cele mai mici schimbări în execuția scripturilor, pentru că Uneori, împărțirea secundelor pot fi fatale și pot duce la pierderi mari atunci când se utilizează un cod lent la scară largă.

Ei bine, plus, microsecundele contabile la calcularea afectează acuratețea calculului într-o parte pozitivă.

Pentru a demonstra narcurile sale teoretice, am scris un script simplu, care calculează timpul de execuție al ciclului gol cu \u200b\u200b30.000.000 iterații (am decis să iau mai mult pentru claritate):

Funcția PHP Microtime () are doar un singur parametru get_as_float., atunci când indicați ce valori adevărat. Puteți obține timpul PHP actual în câteva secunde care au trecut de la începutul erei Unix cu o precizie de microsecunde.

Din moment ce aveam nevoie, era exact ora actuală și nu numărul de secunde de la începutul erei Unix, atunci am folosit acest parametru pe care îl puteți vedea în codul meu.

Ca rezultat, folosind funcția eCHO ()Următorul mesaj a fost afișat pe ecran: Scriptul a fost finalizat pentru 1.3156361579895 secunde.

Pentru a determina că această tehnică funcționează corect, am decis să stabilesc un timp de execuție fix al scriptului utilizând funcția somn ()ceea ce face executarea scenariului la numărul specificat de secunde.

Ca rezultat, următorul design a returnat mesajul Scriptul a fost finalizat pentru 2.0000510215759 secunde:

Depășirea întârzierii specificate în acțiunile microscopice de secunde poate fi retrasă la momentul apelurilor structurilor de cod și procesează rezultatele execuției lor pe glanda serverului, astfel încât acestea pot fi închise îndeaproape.

Dacă acestea sunt încă enervante dvs. sau clientul dvs., puteți utiliza hackerul sub forma unei rotunjiri banale la sute sau mii cu funcția PHP a rundei (), folosind-o după cum urmează:

Rotund (microtime (adevărat) - $ start, 2);

Rezultatul executării acestei piese de cod pentru exemplul de mai sus va fi valoarea în runda de 2 secunde, care va aranja cei mai sofisticați perfecționiștii 🙂

Pe această informație de astăzi despre modul de determinare a timpului de execuție a scriptului PHP se încheie.

Scrieți feedbackul în comentariile și puneți întrebări care vă interesează în mesajele publice publice publice.

Dacă dezvoltați un proiect mare, atunci poate dura un timp mare la procesarea unor date. Pe diferite găzduire sunt limitele lor pe astfel de acțiuni și dacă aveți nevoie să creșteți acest timp - atunci vă voi spune în detaliu cum se poate face.

Așa că înțelegi despre ce vorbim, voi da un mic exemplu. Când ieșiți din intervalul de timp afișat, puteți obține următorul tip de eroare:

Eroare fatală: timpul maxim de execuție de 30 de secunde depășit în site.php pe linia 19

Voi spune aproximativ 4 moduri de a scăpa de ea.

Dar costă pentru a începe cu faptul că, în fiecare caz, toate metodele enumerate nu pot funcționa, deoarece unii furnizori de găzduire sunt interzise prin schimbarea acestui parametru în sine.

Creșterea timpului de execuție a scriptului PHP prin fișierul de configurare PHP.ini

Ca prima modalitate de a spori timpul de execuție al scenariului, vom folosi fișierul de configurare php.ini..

Pentru a găsi cu exactitate unde este acest fișier, citiți.

Deschideți-l într-un mod convenabil pentru dvs. și introduceți-l în partea de jos:

Max_executy_time \u003d 300;

Unde " 300 "Înseamnă 300 de secunde (schimbați la dvs.). Acest fișier, din păcate, nu toate găzduirea este disponibil pentru editarea utilizatorilor.

Creșterea timpului de execuție a scriptului PHP prin intermediul funcției "INI_SET" încorporate

A doua metodă se bazează pe utilizarea funcției " ini_set." Introduceți-o direct la fișierul de script, de preferință în partea de sus. Exemplu:

Iată sensul " 300 »De asemenea, înlocuiți secundele necesare. NotăOdată cu utilizarea PHP în modul sigur, această funcție nu va fi disponibilă.

Creșterea timpului de execuție a scriptului PHP prin funcția "Set_Time_limit" încorporată "

A treia cale, probabil, una dintre cele mai populare - folosirea funcției " set_time_limit.»Pentru a schimba timpul de execuție al scriptului. De asemenea, utilizat direct în fișierul PHP în sine. Exemplu:

Aici " 300 »De asemenea, schimbați valoarea de care aveți nevoie. Introducerea codului este preferabil la început.

Creșterea timpului de execuție a scriptului PHP prin File.htaccess

Ultima opțiune este de a edita fișierul .htaccess.care este în rădăcina site-ului dvs. (dacă nu există nimeni - creați-l).

În partea de sus a acestui fișier insert:

Php_value max_exection_time 300.

" 300 "De asemenea, vă schimbați la dvs.

NotăÎn toate cazurile, timpul de execuție al scriptului este indicat în câteva secunde. În plus, valoarea parametrului în toate metodele poate dura " 0 ", Ceea ce înseamnă un timp nelimitat de execuție.

Cum să aflați cât timp este rezervat pentru a executa un script PHP?

După un mod în care ați încercat să schimbați timpul de execuție a scenariului, trebuie să știți dacă sa întâmplat cu adevărat.

Pentru a face acest lucru, creați un fișier PHP în rădăcina site-ului dvs., unde să ieșiți valoarea timpului setat:

Dacă timpul este egal cu ceea ce ați specificat - vă felicitați, ați obținut scopul dorit. În caz contrar, citiți din nou articolul, scrieți în comentariile despre problema dvs. sau trimiteți-l furnizorului dvs. de găzduire.

Protejele de execuție a scriptului în scopul determinării timpului pentru formarea unei pagini sau a elementului său pentru a construi un cod sigur și fiabil al site-ului în ansamblu.

Există trei opțiuni fundamentale diferite în acest scop: timpul de formare a întregii pagini, momentul actualizării elementului de pagină și timpul de execuție nu este limitat, inclusiv faptul că sesiunea sesiunii de către vizitator.

Timp de execuție al scriptului

Pe PHP, timpul de execuție a scriptului este la fel de simplu ca și în primele limbi de programare. Prin definirea etichetelor temporare la început și la sfârșitul codului studiat, calculează diferența dintre aceste valori, puteți determina cu exactitate cât de mult timp a avut executarea tuturor structurilor sintactice care se află între marcajele finale și inițiale.

Script simplu: Un exemplu de determinare a timpului de execuție a ciclului.

PHP oferă dezvoltatorului două funcții: microtime () și timp (), care pot fi utilizate pentru a forma etichete temporare. Determinarea acestor etichete Înainte de a începe codul studiat și la finalizarea acestuia, puteți calcula diferența, adică pentru a obține un timp real care a fost cheltuit pe execuția codului.

Microtime () și timp () funcții

În acest exemplu, un număr diferit de iterații este utilizat în ciclul: 567 sau 56789. În primul caz, ciclul funcționează mai repede, în a doua - de zece ori mai lentă.

Funcția Microtime () poate fi utilizată fără parametri și apoi rezultatul său va fi un șir de caractere din două numere separate de un spațiu. Primul număr este numărul de microsecunde, al doilea număr este numărul de secunde care au trecut de la data recunoscută de începutul erei Unix.

Dacă funcția Microtime (adevărată) este numită cu parametrul, iar valoarea sa este adevărată, atunci rezultatul va fi numărul - ca cantitatea de număr de secunde și microsecunde. Utilizarea unei funcții fără parametri este echivalentă cu apelarea: Microtime (FALSE).

Funcția Time () nu funcționează cu microconde, deoarece nu există timp de execuție zero pe un număr mai mic de iterații.

Valoarea practică a timpului de execuție

PHP - limba rapidă, modernă și perfectă funcțională. În cele mai multe cazuri, timpul de execuție al scenariului nu are nici măcar sensul PHP. Dar formarea unei pagini poate fi efectuată pe baza datelor obținute din baza de date. În acest caz, în plus față de întârzierea de selectare a informațiilor, pot apărea date temporare privind livrarea datelor, la înregistrarea serverului și a altor circumstanțe.

Programarea modernă pe Internet este adesea forțată să socotească cerințele procesului de procesare a informațiilor distribuite, necesitatea de a colecta date din diverse resurse de rețea online. În aceste cazuri similare, estimarea timpului de execuție a scriptului joacă un rol strategic și poate avea o importanță practică semnificativă.

În special, atunci când se dezvoltă un motor de căutare, poate fi necesar să se vizualizeze sistematic spectrul de resurse specifice de rețea pentru modificările făcute pentru o anumită perioadă de timp. Dar o anumită resursă poate fi:

  • nu este disponibil;
  • blocat;
  • să fie menținută.

În aceste cazuri, scenariul va atârna, fie va fi mult mai lung pentru a aștepta evenimentele de care aveți nevoie.

Prin stabilirea timpului exact pentru a executa scriptul, de exemplu, 10 sec., 1 min. sau 5 minute, este posibil să se ofere resurse proprii cu respectarea strictă a regulilor de prelucrare a tuturor resurselor la distanță încât este necesar pentru rezolvarea sarcinilor sale.

Timpul și locul de executare a scenariului

Limba de server PHP, dar acest lucru nu este în toate cazurile înseamnă că timpul de execuție a scriptului este determinat exclusiv de viteza serverului. Doar o gamă limitată de sarcini necesită procesarea serverului. Accesarea bazei de date sau la o resursă pe o rețea din script este o ieșire în afara competenței serverului și un timp suplimentar care va aștepta să stabilească conexiunea dorită și să obțină datele necesare.

Lansarea scriptului PHP poate fi efectuată utilizând tehnologia Ajax, adică după ce faceți clic pe vizitatorul site-ului de pe elementul paginii. Aceasta este o practică comună când pagina nu este actualizată în întregime, ci numai elementul său separat. De regulă, o astfel de soluție poate fi asociată cu o probă de date necesare. Orice întârziere de execuție aici este esențială pentru vizitator. Dacă timpul depășește așteptările sale, va merge doar la o resursă mai rapidă și confortabilă.

Dezvoltatorul poate estima cât timp este nevoie de procesul dorit, iar dacă timpul de execuție a scriptului va începe să iasă pentru un cadru acceptabil, acesta poate trimite un mesaj adecvat vizitatorului în locul unui răspuns. Acest lucru îmbunătățește foarte mult calitatea resurselor și este o soluție bună.


Uneori este necesar să cunoașteți timpul de execuție al scenariului. Și acest lucru se poate face folosind încorporarea PHP. Funcții.

Puteți da diverse opțiuni. De ce poate cineva trebuie să învețe timpul pentru care este executat codul.
Acest lucru poate fi un interes personal pentru testarea vitezei funcțiilor, bibliotecilor, claselor etc.
Deci, în dezvoltarea scripturilor sale și măsurați viteza de execuție pentru a îmbunătăți în continuare.
Imaginați-vă că ați dezvoltat un fel de funcție care este efectuată timp de ceva timp și nu sunteți mulțumit de viteza de muncă.
Și o îmbunătățiți treptat. Dar nu înțelegeți dacă aceste îmbunătățiri beneficiază de beneficiile sau nu.
Pentru a face acest lucru, puteți măsura viteza executării acestuia.

Primul opțiune (Nu destul de precis, dar adecvat ca exemplu):
Puteți utiliza încorporarea PHP. clasă DateTime. Pentru a oferi date și ore (a început să fie susținută cu PHP 5 în funcție de versiunea curentă a PHP7).
Voi spune că funcția va fi utilizată ca parte a acestui exemplu pentru a măsura viteza. tU DORMI ()care va amâna executarea programului la numărul specificat de microsecunde. Puteți verifica codul dvs. care trebuie verificat pentru viteza de execuție.

Asa de. Pentru a începe, observăm punctul cu care trebuie să începeți să luați ora locului:

$ Starttime \u003d Nou DataTime ("acum");
Creați o instanță a clasei DateTime. cu parametrul "ACUM" Pentru a obține ora curentă.
După aceea, este necesar să plasați corpul scriptului testat (de exemplu, aceasta este o funcție de uzură).

$ endtime \u003d noul datetime ("acum");
Și obținem diferența între începutul și sfârșitul executării scriptului:
$ interval \u003d $ starttime-\u003e diff ($ endime);
Și afișează rezultatul rezultat sub forma numărului de secunde și milisecunde:
ECHO $ \u200b\u200bInterval-\u003e Format ("% s secunde,% f microsecunde");

Pentru un rezultat mai detaliat și mai complet, puteți efectua o imprimare completă a rezultatului în carne înainte de a specifica anul.
$ Interval-\u003e format ("% y ani,% m luni,% d zile,% h ore,% i minute,% s secunde,% f microsecunde");


Ca rezultat, trebuie să obținem timpul pentru care scenariul va fi executat.

Viteza de execuție a scenariului pentru mine:
01 secunde, 441 microsecunde

Toate codurile din acest exemplu:
$ Starttime \u003d Nou DataTime ("acum"); USLEEP (1000000); $ endtime \u003d noul datetime ("acum"); $ interval \u003d $ starttime-\u003e diff ($ endime); Echo ($ interval-\u003e format ("% s secunde,% f microsecunde"));

Opțiunea secundă:
Profitați de funcția Microtime () încorporată (), care este susținută de PHP4 pe versiunea curentă a PHP7 la momentul scrierii articolului.

Microtime () returnează ștampila de timp curent Unix. În microsecunde. Această caracteristică este disponibilă numai pe sistemele de operare care au un apel de sistem. gettimefday ().


Creați o variabilă care va începe timpul de începere a timpului:
$ Start \u003d microtime (adevărat);
Parametrul funcției microtime. Transfer adevărat. Pentru a obține rezultatul în formă reală pluti.reprezentând ora curentă în câteva secunde care au trecut de la începutul erei Unix. Cu o precizie de microsecunde.
După aceea, punem corpul scriptului testat (de exemplu, aceasta este o funcție de uzură).
USLEEP (1000000); // Funcția care amână timpul de execuție al programului pe 1000000 microsecunde
Acum ajungem la sfârșitul scenariului:
$ Sfârșitul \u003d microtime (adevărat);
Noi găsim diferența între începutul și sfârșitul lucrării scriptului:
$ diff \u003d $ ed - $ start;
Și afișează rezultatul:
Echo "Timp de execuție a scriptului:" (Diff). "SEC".

Scriptul meu a fost efectuat în timpul:
Timp de execuție al scriptului: 1.0004560947418 sec.

Toate codurile din acest exemplu:
$ Start \u003d microtime (adevărat); USLEEP (1000000); $ Sfârșitul \u003d microtime (adevărat); $ diff \u003d $ ed - $ start; Echo "Timp de execuție a scriptului:" (Diff). "SEC".

Ce opțiune funcționează mai precis, nu știu, dar presupun că opțiunea utilizând funcția microtime () trebuie să fie mai precis, deoarece în prima opțiune, pentru a crea o instanță de clasă DateTime ("acum") Mai mult timp ar trebui să fie cheltuit.

La depanarea scripturilor cu un factor obligatoriu care trebuie luată în considerare în primul rând este timp de execuție al scriptului. Și în acest mic articol, voi arăta o modalitate foarte bună și ușoară, cum să aflați timpul de execuție al scenariului.

Baza are funcții de a lucra cu data și ora. Eu propun să ia în considerare exemplul astfel încât să înțelegeți cum se întâmplă numărarea timpului de execuție a scriptului:

$ Start \u003d microtime (adevărat);
$ Sum \u003d 0;
pentru ($ i \u003d 0; $ i< 100000; $i++) $sum += $i;
Echo "Timpul de execuție a scriptului:" (Microtime (adevărat) este $ Start);
?>

Ca rezultat, vom vedea asta timp de execuție al scriptului Va, de exemplu, cum ar fi: " 0.014652967453 "Dacă este rotunjit, atunci 0.015 secunde. Acesta este momentul executării scenariului.

Acum despre cum funcționează. Funcţie microtime () cu valoarea transmisă adevărat. Returnează numărul de secunde ținute de la miezul nopții 01.01.1970 Mai mult, această valoare este estimată la sute de secundă.

Apoi, există un script obișnuit pe care îl verificăm. În schimb, cu siguranță va fi scenariul tău. Și, în cele din urmă, ultima linie merge diferența dintre ora curentă (după executarea scenariului) și faptul că am înregistrat la începutul scenariului. Diferența dintre script și timp înainte de a începe și există timp de execuție al scriptului.

Cred că totul este simplu aici. Dar pentru a aplica această metodă de numărare a timpului, vă recomandăm cu tărie. De exemplu, când am depus munca motorului meu, pe care acest site costă, mi-am accelerat munca în aproape 2 ori.