di: Claudio Garau 22 Gennaio 2009
Un benchmark non è altro che un test effettuato su un'applicazione per valutarne le prestazioni, in particolare si tratta di una procedura tesa a stimare le performance di un software con particolare attenzione alla sua velocità nell'esecuzione degli scopi per cui è stato concepito; grazie al benchmark è anche possibile effettuare dei confronti tra diverse soluzioni in modo da individuare la più performante tra di esse.
Questa tipologia di test può essere utilizzata anche per valutare il funzionamento degli script PHP ed eventualmente per apportare migliorie al loro listato sulla base dei risultati ottenuti; per questo motivo, in questa breve trattazione saranno descritte delle semplici procedure per il benchmark delle applicazioni in PHP che potrebbero aiutare lo sviluppatore a scrivere codici più efficaci, puliti e veloci in sede di produzione.
Come è noto i cicli sono conosciuti anche con il come di costrutti di iterazione, questo perché la loro funzione è quella di ripetere un determinato comportamento sulla base di una clausola detta condizione di terminazione del ciclo; nel caso di cicli in cui alla condizione di terminazione corrisponda un valore basso, il benchmark può essere una procedura inutile, valida solo per testare intervalli di tempo impercettibili in fase di esecuzione. Il discorso cambia nel caso in cui il ciclo richieda un alto numero di iterazioni.
Si osservino i due cicli for contenuti nei seguenti listati:
Listato 1
<?php # registrazione del momento iniziale del test $inizio_benchmark = (float) array_sum(explode(' ', microtime ())); # definizione di un array $ a = array_fill(0, 20000, "HTML.it"); # esecuzione del ciclo for ($i = 1; $i <= count($a); ++$i) { echo $i."<br/>\n"; } # registrazione del momento finale del test $fine_benchmark = (float) array_sum(explode(' ',microtime())); # esito del benchmark echo "Esito in secondi: ". sprintf("%.5f", ($fine_benchmark-$inizio_benchmark)); ?>
Listato 2
<?php
$inizio_benchmark = (float) array_sum(explode(' ',microtime()));
$a = array_fill(0, 20000, "HTML.it");
$x=count($a);
for ($i = 1; $i <= $x; ++$i)
{
echo $i."<br/>\n";
}
$fine_benchmark = (float) array_sum(explode(' ',microtime()));
echo "Esito in secondi: ". sprintf("%.5f", ($fine_benchmark-$inizio_benchmark));
?>
I due codici proposti, molto simili, sono stati concepiti per lo stesso scopo e funzionano nello stesso modo tranne che per la diversa procedura con cui è stata proposta la condizione di terminazione al ciclo for.
Elencando gli elementi che accomunano le due piccole applicazioni è possibile dire che in entrambe:
microtime() che avrà il compito di restituire uno UNIX Timestamp completo di millisecondi;microtime(), produrrà una stringa composta da una serie di valori separati da uno spazio che potranno essere ridotti ad elementi di un array grazie alla funzione explode(), semplicemente utilizzando lo spazio vuoto come delimitatore;explode() conterrà dei valori che potranno essere sommati ottenendo il valore decimale (float) corrispondente al momento iniziale del benchmark;$a, per il quale grazie alla funzione array_fill() sarà possibile definire l'indice iniziale (0), il numero di valori contenuti (20.000, per un in dice numerico che andrà da 0 a 19.999) e i valori stessi (una stringa Html.it ripetuta per 20.000 volte);for verrà generato un numero di iterazioni pari a quello dei valori contenuti nell'array (condizione di terminazione);Si passi ora all'analisi delle differenze tra i due listati:
$a verrà contato all'interno del ciclo for (for ($i = 0; $i <= count($a); ++$i)), la funzione count() ha infatti il compito di restituire una cifra pari a tutti gli elementi presenti in un vettore;count(), ma l'output di questa sarà associato come valore ad una nuova variabile ($x=count($a)) che verrà poi utilizzata come condizione di terminazione del ciclo for (for ($i = 0; $i <= $x; ++$i)).Ma vediamo i tempi di esecuzione.
Guida Yii FrameworkCome creare applicazioni Web in modo semplice e veloce con il... |
Guida Zend FrameworkDiventate professionisti dello sviluppo Web. Zend Framework è lo... |
Guida Applicazioni Facebook con PHPCome realizzare un'applicazione per Facebook. Dalle basi della... |
Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.
Iscriviti alla newsletter
|
|
Corso PHP per Webmaster11 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base25 Giugno 2012 a Milano |
|
|
Corso Google AdWords Base05 Giugno 2012 a Roma |