Foros del Web » Programando para Internet » PHP »

error de php o mio??

Estas en el tema de error de php o mio?? en el foro de PHP en Foros del Web. Hola foro: Trato de hacer un 'programita' q me permita ver el tiempo transcurrido entre sentencias para evaluar la mas rapida pero me pasa algo ...
  #1 (permalink)  
Antiguo 20/09/2008, 19:58
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Exclamación error de php o mio??

Hola foro:

Trato de hacer un 'programita' q me permita ver el tiempo transcurrido entre sentencias para evaluar la mas rapida pero me pasa algo raro....

Sin importar el orden de los codigos a evaluar me sale q la segunda parte es por lo general mas rapida q la primera aun siendo lo mismo en ambas partes... incluso me da resultado negativo como si la pagina terminara de cargar antes de ser llamada :S .... ????!!!!

lo codigos a evaluar estan antes y despues de las barras de comentarios ( // )

Código:
<?php
$Ti = microtime(true);
$a1=$a2=$x=0;
for($i=0;$i<=10000;$i++){
	$Ta = microtime(true);

	//
	$x++;
	//o cualquier otra sentencia

	$Tb = microtime(true); 
	$T1 = $Tb - $Ta; 
	$Ta = microtime(true);

	//
	$x--;
	//o cualquier otra sentencia

	$Tb = microtime(true); 
	$T2 = $Tb - $Ta; 
	if($T1 < $T2){
		$a1++;
	}else{
		$a2++;
	}
}
echo "<br />a1=$a1<br />a2=$a2";
$Tf = microtime(true);
echo '<br />tiempo de pagina'.($Tf - $Ti);
//($Tf - $Ti) aveces me sale negativo  esto no tiene logica... :S 
?>
espero comentarios y gracias.
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red
  #2 (permalink)  
Antiguo 20/09/2008, 23:52
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: error de php o mio??

He probado diría cientos de veces el script que pones y en todas las ejecuciones me sale un valor total promedio de 0.3 segundos. Ni un solo negativo

Con respecto a la comparación que haces dentro del for. Es cierto, aún con el mismo código aparentemente el segundo bloque se ejecuta más rápido. Sin embargo, en el if..else.. que pones para comparar sólo tomas en cuenta dos condiciones: $T1 < $T2 (TRUE en un promedio de 1500 de 10000 ejecuciones) y $T2 >= $T! (TRUE en casi 9000 de 10000 ejecuciones) Si separamos la segunda condición para > e = tenemos:

1er bloque < 2do bloque : Promedio de 1500
1er bloque > 2do bloque : Promedio de 4000
1er bloque = 2do bloque : Promedio de 4500

Ahora, si al inicio del for agregamos algo arbritario, como $var = microtime(true);, los tiempos del primer y segundo bloque se igualan practicamente, aunque el primero sigue demorando un poco más. Si duplicamos este último trozo de código, el 1er bloque empieza a tomar ventaja sobre el segundo. Podría deducir entonces que a minetras más veces ejecutemos la función microtime() su velocidad de respuesta aumentará cada vez más. O tal vez sea (y es lo más seguro) que al cambiar en cada ciclo el servidor se "sobrecarga" ligeramente, por lo que los primeros procesos dentro de cada ciclo se ejecutan bajo un servidor en condiciones de menor memoria que los procesos intermedios y finales.

Código php:
Ver original
  1. <?php
  2. $Ti = microtime(true);
  3. $a1=$a2=$a3=$x=0;
  4. for($i=0;$i<=10000;$i++){
  5.     /* INICIO COsAS ARBRITARIAS */    
  6.         $var = microtime(true);
  7.         $var = microtime(true);
  8.         $x++;
  9.         $x--;
  10.     /* FIN COsAS ARBRITARIAS */
  11.  
  12.     $Ta = microtime(true);
  13.  
  14.     //
  15.     $x++;
  16.     //o cualquier otra sentencia
  17.  
  18.     $Tb = microtime(true);
  19.     $T1 = $Tb - $Ta;
  20.  
  21.     $Ta = microtime(true);
  22.  
  23.     //
  24.     $x--;
  25.     //o cualquier otra sentencia
  26.  
  27.     $Tb = microtime(true);
  28.     $T2 = $Tb - $Ta;
  29.     if($T1 < $T2){
  30.         $a1++;
  31.     }elseif($T1 > $T2){
  32.         $a2++;
  33.     } else {
  34.         $a3++;
  35.     }
  36. }
  37. echo "<br />a1: Primer bloque es más rápido =$a1<br />a2: Segundo bloque es más rápido =$a2<br />a3: Ambos bloques son iguales =$a3";
  38. $Tf = microtime(true);
  39. echo '<br />tiempo de pagina'.($Tf - $Ti);
  40. //($Tf - $Ti) aveces me sale negativo  esto no tiene logica... :S
  41. ?>

Saludos,

Última edición por okram; 20/09/2008 a las 23:59
  #3 (permalink)  
Antiguo 21/09/2008, 08:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: error de php o mio??

a mi, alguna ves me paso.... algo similar, (segun) una de cada 100 veces me salia el mismo numero... digamos, si en gral. era positivo salia completamente negativo... 1.21 ... -1.21 (etc, etc)

pero, de pronto dejo de ocurrir.... por eso no supe ni nada, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 21/09/2008, 09:19
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: error de php o mio??

Weno gente...

Ami a aun me salen valores negativos, con el codigo de okram incluso...
Cierto... se me fue la comparacion de igualdad...

gracias a los 2 por sus comentarios y ojala el codigo sea de utilidad...

salu2
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red
  #5 (permalink)  
Antiguo 21/09/2008, 10:06
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: error de php o mio??

Al inicio prueba imprimiendo $Ti y antes de hacer la resta imprimer $Tf. Ve qué devuelve cuando la resta sale negativa.

Código php:
Ver original
  1. <?php
  2. $Ti = microtime(true);
  3. echo "Inicio: $Ti<br />";
  4. $a1=$a2=$a3=$x=0;
  5.  
  6. // .........
  7.  
  8. $Tf = microtime(true);
  9. echo "<br />Final: $Tf";
  10. echo '<br />tiempo de pagina'.($Tf - $Ti);
  11. // .........
Saludos,
  #6 (permalink)  
Antiguo 21/09/2008, 11:00
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: error de php o mio??

Inicio: 0.81724600 1222015874
.....
Final: 0.51139500 1222015875
tiempo de pagina-0.305851....?????

OBSERVACION...

para la primera parte declaro una funcion:
function qqq(){
global $a,$x;
echo 'asdf';
$x++;$x--;
if($a){$x++;}else{$x--;}
}

esta funcion la llamo en la primera parte y en la segunda parte hago lo mismo sin la funcion

echo 'asdf';$x++;$x--;if($a){$x++;}else{$x--;}

me sale repetidamente q la segunda parte es casi el 40% mas rapida q la primera... es decir q es mas rapido usar sentencia normal repetitiva q funciones...
incluso si se llama varias veces a una funcion (ya q creo q esa es su 'funcion')....

1º- con la funcion, supongo, q se ahorra espacio en el codigo y la pagina pesa menos... es decir q la pagina demora menos en llegar al usuario y carga mas rapido.
2º- con el codigo repetitivo se hace la pagina mas pesada pero se procesa mas rapido en el server... lo q tambien hace q cargue mas rapido...

es factible entonces el uso de funciones para sintaxis repetitivas? es mas conveniente regargar menos al server o hacer la pagina mas liviana?

gracias
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red
  #7 (permalink)  
Antiguo 21/09/2008, 13:38
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: error de php o mio??

Cita:
Iniciado por killerangel Ver Mensaje
Inicio: 0.81724600 1222015874
.....
Final: 0.51139500 1222015875
tiempo de pagina-0.305851....?????
Ajá! Qué versión de PHP tienes? La función microtime() acepta un parámetro sólo desde PHP 5.0.0. Al parecer tú tienes una versión inferior (4.x). Con PHP 5 deberías obtener algo como
Código:
Inicio: 1222025608.23

a1: Primer bloque es más rápido =2882
a2: Segundo bloque es más rápido =2458
a3: Ambos bloques son iguales =4661
Final: 1222025609.15
tiempo de pagina0.916235923767
Ese parámetro opcional de la función microtime() disponible desde PHP5 permite devolver un valor tipo float. Si no se define este parámetro o la versión de PHP es inferior a 5 obtienes un valor consistente en dos cifras, la primera corresponde a la fracciónde un segundo expresada en microsegundos y la segunda al número de segundos. Es por eso que las restas no son consistentes. Revisa el manula de PHP para la función microtime(), en el primer ejemplo explican como obtener la diferencia de dos marcas de tiempo cuando el formato devuelto es el de PHP4.

Saludos,

EDITO: Para que veas el diferente comprotamiento en ambas versiones mira este código. Como ya te dije, si microtime() no tiene argumentos definidos bajo PHP5, simulará el comportamiento que tiene en PHP4
Código php:
Ver original
  1. <?php
  2.  
  3. $Ti4 = microtime();
  4. $Ti5 = microtime(true);
  5. echo "microtime() PHP4: $Ti4<br />";
  6. echo "microtime() PHP5: $Ti5<br />";
  7.  
  8. ?>
Obtienes:
Código:
microtime() PHP4: 0.32813300 1222026315
microtime(true) PHP5: 1222026315.33
Como verás la parte entera del float devuelto por PHP5 (1222026315) coincide con la segunda cifra del resultado devuelto en PHP4 (1222026315), y la parte decimal en PHP5 (.33) es un redondeado a dos dígitos de la primera cifra bajo PHP4 (.32813300)


Última edición por okram; 21/09/2008 a las 13:48
  #8 (permalink)  
Antiguo 21/09/2008, 14:29
Avatar de chwc  
Fecha de Ingreso: julio-2008
Ubicación: Buenos Aires ! :D
Mensajes: 814
Antigüedad: 15 años, 8 meses
Puntos: 103
Respuesta: error de php o mio??

bueno, perdon que este comentario no encaje aqui pero, como hizo okram para que su codigo se vea asi??
  #9 (permalink)  
Antiguo 21/09/2008, 15:42
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: error de php o mio??

@chwc, siempre es bueno leer de vez en cuando los mensajes marcados como IMPORTANTE en los subforos que visitas

IMPORTANTE: http://www.forosdelweb.com/f18/nuevo...geishi-624896/

El sistema aún está en prueba y mejorándose, pero ya está lo suficientemente avanzado como para empezar a usarlo.

Saludos,
  #10 (permalink)  
Antiguo 21/09/2008, 15:54
Avatar de killerangel  
Fecha de Ingreso: septiembre-2007
Ubicación: Un punto en el espacio
Mensajes: 592
Antigüedad: 16 años, 7 meses
Puntos: 10
Respuesta: error de php o mio??

ok estoy actualizando mi easyphp....
la verdad es q no entiendo como me pudo pasar si ya habia actualizado al easyphp 2.0b1.... lo q me llego a enterar...

gracias okram
__________________
Sueñen... y trabajen por hacer esos sueños realidad... de eso se construye el futuro!!
Me siento entre la ASP-ada y la PHP-red
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:24.