Newsgroup: it.comp.www.php
Titolo: Risultati test prestazioni tra PHP e Perl

Ciao a tutti,
    oggi ho voluto effettuare un test per misurare il divario di prestazioni
tra richiamare uno script in Perl ed uno in PHP.
Entrambi gli script sono molto semplici, scrivono solo una stringa sulla
schermo; questo per verificare non il divario tra i tempi di esecuzione, ma
per testare la differenza dei tempi di messa in esecuzione da parte del
webserver.
Gli script Perl sul server in oggetto girano in modalità "liscia", senza
modperl.
Il test consiste nel richiamare 50 volte lo script Perl e 50 volte quello
PHP; lo script che ha fatto il test è posto su un altro server per non
influenzare eccessivamente il test (causa scheduling...)
Ecco i risultati:
Test script Perl
Tentativo 1= 169 ms
Tentativo 2= 149 ms
Tentativo 3= 331 ms
Tentativo 4= 157 ms
Tentativo 5= 274 ms
Tentativo 6= 220 ms
Tentativo 7= 245 ms
Tentativo 8= 226 ms
Tentativo 9= 157 ms
Tentativo 10= 212 ms
Tentativo 11= 144 ms
Tentativo 12= 217 ms
Tentativo 13= 161 ms
Tentativo 14= 157 ms
Tentativo 15= 152 ms
Tentativo 16= 173 ms
Tentativo 17= 192 ms
Tentativo 18= 161 ms
Tentativo 19= 159 ms
Tentativo 20= 144 ms
Tentativo 21= 166 ms
Tentativo 22= 152 ms
Tentativo 23= 231 ms
Tentativo 24= 154 ms
Tentativo 25= 207 ms
Tentativo 26= 151 ms
Tentativo 27= 264 ms
Tentativo 28= 198 ms
Tentativo 29= 187 ms
Tentativo 30= 162 ms
Tentativo 31= 188 ms
Tentativo 32= 353 ms
Tentativo 33= 152 ms
Tentativo 34= 144 ms
Tentativo 35= 156 ms
Tentativo 36= 205 ms
Tentativo 37= 148 ms
Tentativo 38= 151 ms
Tentativo 39= 149 ms
Tentativo 40= 457 ms
Tentativo 41= 151 ms
Tentativo 42= 149 ms
Tentativo 43= 393 ms
Tentativo 44= 152 ms
Tentativo 45= 143 ms
Tentativo 46= 212 ms
Tentativo 47= 157 ms
Tentativo 48= 204 ms
Tentativo 49= 234 ms
Tentativo 50= 401 ms
Media= 200 ms
Test script PHP
Tentativo 1= 115ms.
Tentativo 2= 98ms.
Tentativo 3= 111ms.
Tentativo 4= 110ms.
Tentativo 5= 106ms.
Tentativo 6= 98ms.
Tentativo 7= 100ms.
Tentativo 8= 100ms.
Tentativo 9= 100ms.
Tentativo 10= 99ms.
Tentativo 11= 110ms.
Tentativo 12= 98ms.
Tentativo 13= 98ms.
Tentativo 14= 100ms.
Tentativo 15= 449ms.
Tentativo 16= 166ms.
Tentativo 17= 102ms.
Tentativo 18= 100ms.
Tentativo 19= 100ms.
Tentativo 20= 108ms.
Tentativo 21= 100ms.
Tentativo 22= 238ms.
Tentativo 23= 108ms.
Tentativo 24= 100ms.
Tentativo 25= 100ms.
Tentativo 26= 105ms.
Tentativo 27= 113ms.
Tentativo 28= 100ms.
Tentativo 29= 100ms.
Tentativo 30= 100ms.
Tentativo 31= 101ms.
Tentativo 32= 111ms.
Tentativo 33= 328ms.
Tentativo 34= 106ms.
Tentativo 35= 100ms.
Tentativo 36= 123ms.
Tentativo 37= 106ms.
Tentativo 38= 102ms.
Tentativo 39= 109ms.
Tentativo 40= 110ms.
Tentativo 41= 107ms.
Tentativo 42= 100ms.
Tentativo 43= 100ms.
Tentativo 44= 109ms.
Tentativo 45= 199ms.
Tentativo 46= 141ms.
Tentativo 47= 123ms.
Tentativo 48= 105ms.
Tentativo 49= 100ms.
Tentativo 50= 108ms.
Media= 123 ms.
Come si può notare da questo test uno Script in PHP viene messo in
esecuzione in un tempo inferiore di circa il 38%
Ho effettuato questo test altre 4 volte avendo queste medie:
Perl: 228 - 184 - 214 - 210
PHP:  111 - 110 - 108 - 107
Facendo le medie escono i seguenti risultati:
Perl: 207ms.
PHP: 112ms.
Il tempo di messa in esecuzione per uno script PHP è quindi di circa 95ms in
meno, ovvero il 46% in meno.
La macchina di test è un PIII a 833Mhz con 512Mb di ram
Chi vuole fare considerazioni ben venga!! :)))



 Chi vuole fare considerazioni ben venga!! :)))
 
A parte che i test si fanno mettendo i "testati" in condizioni il più
possibile simili, non mi sembra che ci siano novità: il perl soffre ed
ha sempre sofferto di problemi di startup.
Il php sembra comunque essere più veloce nello startup, anche se IMHO lo
startup di un programma conta pochetto: se devi solo scrivere una
stringa sul monitor (!!) allora il 90% del tempo di esecuzione dello
script è dato proprio dallo startup, ma se scrivi qualcosa di più
complesso (a volte, qualcosa di *molto* più complesso!) quello che ti
deve interessare è la velocità *di esecuzione* del programma: 207ms non
è che ti cambiano la vita! :-)
Ciao
--ev

 è che ti cambiano la vita! :-)
beh, quanto dici non è del tutto vero; per applicazioni molto critiche il
tempo di startup è importantissimo.
Ad esempio io sto facendo numerosissimi test per cercare di capire come devo
scrivere un'applicazione in Perl che viene richiamata per ora oltre 100.000
volte al giorno; ci sono spesso 3-4 hits al secondo...
Come vedi il solo tempo di startup potrebbe saturare le risorse del
server... Comunque l'applicazione Perl è molto ottimizzata, anche se di ben
50kb; il problema è che fondamentalmente è I/O bound.
Oggi con altri test ho visto che PHP per compilare uno script di 100Kb ci
mette mediamente 60ms (su un PIII a 866Mhz)
Come avrai intuito sono combattuto se riscrivere questo script (2000 righe
di codice Perl) in PHP o C.
Col primo ho il vantaggio del tempo di startup più basso, col secondo il
fatto che è compilato.
Il fatto è poi che il mio hosting non mi vuole installare ne modperl ne
modphp :(
Comunque per app I/O bound mi sembra che il vantaggio dello startup (~70ms)
sia di gran lunga maggiore dello svantaggio della compilazione (30ms per
50kb di codice)
Boh! :)

 Boh! :)
Macchè boh, hai la fortuna di conoscere almeno 3 linguaggi: fai le prove
di "stress" che elementi per valutare e dai quali tirarti le tue
conclusioni ne hai! :-)
Ciao
--ev

 conclusioni ne hai! :-)
non è bello convertire codice da un linguaggio all'altro :)
considera che una riga di regexp di perl possono significare 20 righe di C
:)
Comunque sto studiando un sistema distribuito e scalabile anche su cluster,
quasi quasi ci faccio un pensierino per la tesi dell'anno prossimo (sono
agli sgoccioli ad Informatica)
Ciao!

 :)
Vero, ma lo script non è solo una serie di regexp! Può succedere che 2
linee di C siano 20 di Perl/PHP!
Ciao
--ev