Ver Mensaje Individual
  #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