Newsgroup: it.comp.www.php
Titolo: Tempo di esecuzione di uno script... problema!!!

Volevo far comparire nel mio sito web un'indicazione della velocità dello
script nella  creazione delle pagine.
(come avevo visto per esempio su 
www.hwupgrade.net
 ...fondo pagina)
io ho usanto la funzione microtime() facendo così:
<?
//all'inizio della pagina
list($page_begin_msec, $page_begin_sec) = sscanf( microtime(), "%f %d");
?>
<?
//in fondo alla pagina
list($page_end_msec, $page_end_sec) = sscanf( microtime(), "%f %d");
printf("%01.4f",
($page_end_sec+$page_end_msec)-($page_begin_sec+$page_begin_msec));
?>
Però stranamente il risultato che compare tiene conto anche della velocità
di trasmissione della pagina!!!
Come se lo script venisse eseguito un po' alla volta e contemporaneamente la
pagina spedita!!!! Provate per credere con diversi carichi sulla vostra
connessione!
Il risulatato lo potete vedere su
 
www.brainetwork.net
oppure su
 
http://nikita.ing.unibo.it/~brain/
Chi mi aiuta??
--
Reply to: brain79(at)
inwind.it
www.brainetwork.net
ICQ# 42797710 - FeSToso n°143
[aforisma del giorno]

"Brain" <bra...@REMOVEinwind.it> ha scritto nel messaggio
news:4plb9.119328$n04.3...@twister2.libero.it...

Direi che non è un problema del tuo metodo ma, effettivamente, del codice
della tua pagina.
Se fai una prova ad esempio con seguente codice il problema non si
presenta... almeno a me :))
<?php
list($page_begin_msec, $page_begin_sec) = sscanf( microtime(), "%f %d");
for ($i=0;$i<2000000;$i++) {
   $a=$i*0.5;
}
list($page_end_msec, $page_end_sec) = sscanf( microtime(), "%f %d");
printf("%01.4f",
($page_end_sec+$page_end_msec)-($page_begin_sec+$page_begin_msec));
?>
Non centra niente con il tuo problema... ma se ti interessa io per fare
questa cosa uso una piccola funzioncina che rende la cosa un po' più comoda.
<?php
function getmicrotime(){
 static $var_controllo = 0;
 static $tempo1;
 if ($var_controllo == 0) {
  list($usec, $sec) = explode(" ",microtime());
  $tempo1 = (float)$usec + (float)$sec;
  $var_controllo = 1;
 } else if ($var_controllo == 1) {
  list($usec, $sec) = explode(" ",microtime());
  $tempo2 = (float)$usec + (float)$sec;
  $tempo_esecuzione = $tempo2 - $tempo1;
  $var_controllo = 0;
  return $tempo_esecuzione;
 }
}
//esempio di utilizzo
getmicrotime();
for ($i=0;$i<2000000;$i++) {
   $a=$i*0.5;
}
echo getmicrotime();
?>
La prima volta che la richiami setta il tempo di partenza.... la seconda
ritorna il tempo di esecuzione.. la terza volta risetta il tempo di
partenza.. e così via..
Sorry ma outlook ha mandato a quel paese tutto l'indent...per questo ed
altri casi.. 
http://www.bierkandt.org/beautify/

Chi mi aiuta??
Le funzioni ob_*, direi :-)
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

> Le funzioni ob_*, direi :-)
Ok, thank's! Ora tutto funziona bene... č stata fatta giustizia
sull'efficienza dei miei script (....quasi...)
Ho risolto mettendo all'inizio della pagina.
<?
 ob_start("gz_handler");
?>
E facendo flush solo alla fine
Per i curiosi 
http://www.brainetwork.net
 e
http://nikita.ing.unibo.it/~brain/
Ora qualcuno mi spiega cosa ho fatto?
cosa cambia a livello di interazione tra php, apache, e browser?
normalmente apache non bufferizza tutto?
lo script viene eseguito man mano che il browser ne fa richiesta?


lo script viene eseguito man mano che il browser ne fa richiesta?
No, lo script si arresta quando la coda di I/O fra PHP e Apache e' piena.
Se in questo momento Apache percepisce che il browser si e' incicciato, si
sgancia dal PHP, che termina.
Quindi nel browser puoi vedere l'output delle righe 1-100, mentre Apache e
PHP hanno eseguito fino a riga 150, e l'output 101-150 e' nel buffer sotto
Apache.
===
Il "gzhandler" non solo mette un'altra coda molto piu' ampia (credo che in
teoria sia infinita <eg>), ma ne comprime il contenuto, accelerando un po'
la trasmissione. Se sono pagine di solo testo, accelerando MOLTO :-)
