Newsgroup: it.comp.www.php
Titolo: calcolo 'peso computazionale' di una pagina php

Come posso calcolare il costo computazionale di una pagina php?
Non solo il tempo di esecuzione, ma proprio quanto occupa il processore.
Cosi posso provare a fare dei confronti tra soluzioni diverse...
Grazie
Alex

 ha scritto nel 
messaggio news:opskm5nq...@blulab.blulabs...

Se vuoi confrontare due "codici" e vedere quali fra questi è più veloce 
rispetto all'altro non ti serve prendere come punto di riferimento il 
processore.
Traduci il tuo algoritmo in forma polinomiale e ne tracci il grafico, poi 
per effettuare il confronto analizza un intervallo dato (uguale per 
entrambi) e ne calcoli l'area.
A questo punto fai il rapporto e trovi l'indice di efficienza.
Per trasformare l'algoritmo in forma polinomiale puoi operare nel modo 
seguente:
a) 1 istruzione = 1 unità
b) x istruzioni = x unità.
esempio
leggi x
a = 0
ripeti
 incrementa a
 visualizza a
finchè a = x
tradotto equivale a:   2 + 2x = 2 (x+1)
In altre parole ti ricaverai in questo modo il numero di istruzioni che 
verranno eseguite al variare di x.
Questo è un metodo ovviamente, ci sono altri metodi che puoi applicare.
Cooper
-- 
BlueWare Web Agency
   [http:] 
www.blueware.it
   [msn:] 
coo...@blueware.it
   [icq:] 146781935 

 Come posso calcolare il costo computazionale di una pagina php?
http://www.php.net/register_tick_function
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 
Si questo in teoria. Nella pratica il punto a) è errato.
Vuoi dirmi che:
$a = "1";
e
$b = array_flip(array( "1" => "100", "2" => "99", ... , "100" => "1" ));
hanno lo stesso peso?
E visto che non puoi sapere, a meno di andare a spulciare il codice 
dell'engine, quanto pesa ogni funzione che ti viene messa a disposizione 
è inapplicabile.
Penso che il metodo empirico sia nella pratica l'unica strada percorribile.
Ciao.
	-Ema-


Si quello si, però ripeto, se si applicano un solo peso e una sola misura il 
metodo di sopra continua a essere sempre valido, quello che cambia sarà il 
grado di precisione ma assume una rilevanza minore, nel momento in cui si fa 
un confronto fra due codici e nel momento in cui bisogna solo stabilire 
quale dei due si comporta meglio dell'altro.
Cooper.


 pratica l'unica strada percorribile.
<?php 
$GLOBALS['tick_count'] = 0;
function tick_counter () {
	$GLOBALS['tick_count']++;
}
register_tick_function ('tick_counter', TRUE); 
declare (ticks = 1) { 
	/* begin script to profile */
	/* this code "costs" 23 ticks*/
	$a = 0;
	for ($i = 0; $i < 10; $i++) {
		$a += $i;
	}
	/* end script to profile */
} 
print ("For loop costs " . $GLOBALS['tick_count'] . "\r\n");
$GLOBALS['tick_count'] = 0;
declare (ticks = 1) { 
	/* begin script to profile */
	/* this code "costs" 23 ticks*/
	$a = 0;
	$i = 0;
	while ($i < 10) {
		$a += $i;
		$i++;
	}
	/* end script to profile */
} 
print ("While loop costs " . $GLOBALS['tick_count'] . "\r\n");
?>


 
?
Il codice l'ho capito, ma non perchè hai risposto a me con questo codice.
Ciao.
	-Ema-

 
Quì c'e' se vogliamo un'ambiguità nella domanda: Alessandro vuole 
confrontare soluzioni diverse nel codice, quindi mantenendo la soluzione 
PHP, oppure vuole confrontare soluzioni diverse nel senso di piattaforme 
diverse (PHP vs. .NET)?
In questo caso il sistema da te proposto diventa ancor più difficile da 
applicare.
Ciao.
	-Ema-

"-Ema-" <NOSPALMER...@AThotmail.com> ha scritto nel messaggio 
news:S3gGd.6043$GU.2...@twister1.libero.it...

Setec, con buone probabilità, forse voleva lasciarti intendere che non è 
l'apparenza del codice a rappresentare la complessità dello stesso a livello 
di passi...
...in altre parole 100 istruzioni uguali, e un ciclo che ripete 100 volte le 
stesse istruzioni alla fine si equivalgono e magari il ciclo si dimostra più 
"complesso" a livello di passi rispetto alle 100 istruzioni messe una in 
fila all'altra, sebbene esteticamente sia più conciso rispetto all'altro.
Cooper.



Il mio sistema si applica agli algoritmi che si svincolano dal codice e 
quindi dal linguaggio applicato.
Se hai il codice hai anche l'algoritmo. Se hai l'algoritmo il confronto puoi 
farlo.
Se vuole confrontare a livello di piattaforma allora non deve confrontare i 
due codici ma le due piattaforme... è senz'altro la soluzione migliore.
Ovviamente se una si presta meglio rispetto all'altra, lo stesso discorso si 
ripercuote su quanto ci sta dentro.
In termini algebrici, se hai due insiemi A  e B  in cui B è sottoinsieme di 
A, le proprietà di B si ripercuotono su A e non viceversa.


 
Ciao.
	-Ema-

 
Si, e per misurarlo usa un metodo empirico! :-D
Ciao.
	-Ema-

 Si, e per misurarlo usa un metodo empirico! :-D
Definisci "empirico".
-- 
I am what I am, I do what I can


 
empirico cioè che si basa sull'esperienza, sulla pratica. Nel caso 
specifico Cooper, nel suo primo intervento di questo thread consiglia un 
metodo analitico, quindi basato sull'analisi del sistema nel suo 
dettaglio per ottenere il risultato desiderato, io (e direi anche tu 
visto il codice che hai scritto) sull'osservazione dei risultati, sulla 
pratica appunto.
In pratica per misuare un muro io uso il metro, lui conta i mattoni e 
moltiplica per l'altezza di ogni mattone supponendo che i mattoni siano 
tutti di altezza uguale.
Ho ovviamente banalizzato ma il concetto è questo.
Ecco perchè ti chiedevo per quale motivo postavi a me il codice con cui 
conti il tempo che passa; io suggerisco esattamente la stessa strada e, 
ti dirò, in alcuni miei progetti php tipicamente basati su una pagina 
index.php e smistamento nei vari moduli tramite parametro op uso mettere 
all'inizio della index ed alla fine delle istruzioni che misurano e 
stampano il tempo impiegato usando la funzione microtime.
Ciao.
	-Ema-

 cui conti il tempo che passa; 
[quoto il manuale]
A tick is an event that occurs for every N low-level statements
executed by the parser within the declare block. The value for N is
specified using ticks=N within the declare blocks's directive section.
[/quoto]
Non conto il tempo, conto il numero di statement a basso livello
eseguiti dal parser, ossia il peso computazionale di un pezzo di codice
avente per unita' di misura la piu' piccola unita' messa a disposizione
dal parser PHP.



Infatti
Cooper


 
Vero, scusa. In effetti è l'esempio del manuale che usa 
register_tick_function per misurare il tempo. Resta il fatto che esegui 
una misura sul codice com'è, non un'analisi dello stesso; e lo misuri in 
una precisa macchina etc. etc. Quindi resta un approccio empirico, non 
analitico.
Ciao.
	-Ema-