Dopo aver visto Ottimizzazione della memoria PHP, vediamo un altro caso di studio interessante: la differenza di velocità di esecuzione di un blocco di codice singolo vs suddiviso in N script.
Il codice di esempio è molto semplice, un ciclo che esegue in totale un miliardo di iterazioni (assegna 1 alla variabile x), quello che ci interessa è il tempo di esecuzione di questo script, confrontato poi con l'altra versione. Vediamo ora il codice e i risultati.
Caso 1: script e ciclo unico, totale 1 miliardo di iterazioni
<?php $start=microtime(TRUE); ?>
<?php
for($i=0;$i<1000000000;$i++){ /* 1 miliardo */
$x=1;
}
?>
<?php
$end=microtime(TRUE);
echo $end-$start."\n";
?>
Il tempo medio di esecuzione è stato pari a 2,80 secondi.
Caso 2: suddiviso in 1000 script, totale 1 miliardo di iterazioni
<?php $start=microtime(TRUE); ?>
<?php
for($i=0;$i<1000000;$i++){ /* 1 milione x 1000 volte = 1 miliardo */
$x=1;
}
?>
<?php
for($i=0;$i<1000000;$i++){ /* 1 milione x 1000 volte = 1 miliardo */
$x=1;
}
?>
/* ... 1000 volte totali questo script contenente il ciclo */
<?php
$end=microtime(TRUE);
echo $end-$start."\n";
?>
Il tempo medio di esecuzione è stato pari a 2,85 secondi.
Quindi da questo esempio osserviamo una differenza di efficienza pari a circa 285/280 = 1,018 ovvero il codice unificato in blocco è sicuramente più efficiente, come si immaginava, per una differenza pari a 1,8% circa. La differenza non è enorme, questo caso pratico comunque fa riflettere su possa essere utile, ovviamente quando opportuno, riunire il codice anziché richiamare pezzi in 1000 script in blocco o esterni che siano.
Qualcosa di analogo era già stato studiato più in dettaglio qui:
Limitare tempo di esecuzione del codice (C/C++, Python, JavaScript, PHP)
Algoritmo efficiente C/C++ per limitare tempo di esecuzione programma