Ver Mensaje Individual
  #188 (permalink)  
Antiguo 11/07/2010, 11:36
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Competencias PHP

Cita:
Iniciado por Gustavo72 Ver Mensaje
pateketrueke: voy a disentir un poco en las apreciciones que haces acerca de longitud de código y velocidad.

Si realizas la medición de tiempo comenzando antes del include del archivo que contiene la función, notarás que los scripts más largos tardan más en cargar y, dependiedo de la cantidad de veces que se ejecuta la función, esto puede llegar a ser significativo en el tiempo total.

Por lo demás me parece que estás haciendo un excelente trabajo.

Además voy a reaizar una sugerencia para próximos concursos: estaría bueno que se puedan presentar dos códigos, uno sin comentarios, minimizado y bien optimizado y otro comentado y bien indentado para exponer.
bueno, te muestro el código que esta realizando la prueba del tiempo
Código PHP:
$dummy '';
$times 100;
$start microtime(TRUE);

for (
$i 0$i $times; ++$i)
{
    foreach (
array_keys($tests) as $input$dummy .= reduce($input);
}

$end round(microtime(TRUE)- $start4);
$media round($end $times4); 
aquí lo importante es que siempre cargo el script antes de esta secuencia de código, solo se toma el tiempo que tarda el concatenar los resultados de reduce(), siempre repito mis pruebas cambiando de 100, a 1000 y 10000 el numero de ejecuciones....

además, no solo lo hago una ves... lo hago aproximadamente 30 veces, el resultado del promedio de ejecución al final es lo que anoté en el tema original... (:


--
ahora, con respecto a los códigos... siempre es mejor entregar una sola versión, comentada o no... el proceso de contar la longitud del mismo corresponde hacerlo aparte, por ejemplo, escribí estas dos funciones para probar los códigos...

Código PHP:
Ver original
  1. function function_code($name)
  2. {
  3.     $callback = new ReflectionFunction($name);
  4.     $file = file($callback->getFilename());
  5.     $code = array_slice($file, $callback->getStartLine() -1, $callback->getEndLine());
  6.     $code = preg_replace('/<' . '?' . 'php[\s\r\n\t]+/', '', join('', $code));
  7.     $code = '<' . '?' . "php $code";
  8.  
  9.     $output = '';
  10.     foreach (token_get_all($code) as $token)
  11.     {
  12.         if (is_string($token)) $output .= $token;
  13.         else
  14.         {
  15.             switch ($token[0]) {
  16.                 case T_COMMENT:
  17.                 case T_OPEN_TAG:
  18.                 case T_CLOSE_TAG:
  19.                 case T_DOC_COMMENT:
  20.                 break;
  21.                 case T_WHITESPACE:
  22.                     $output .= ' ';
  23.                 break;
  24.                 default:
  25.                     $output .= $token[1];
  26.                 break;
  27.             }
  28.         }
  29.     }
  30.     return $output;
  31. }
  32.  
  33. // http://www.php.net/manual/en/function.php-check-syntax.php#86466
  34. function php_syntax($code)
  35. {
  36.     $display = @ini_set('display_errors',1);
  37.     $log = @ini_set('log_errors',0);
  38.  
  39.     $braces = 0;
  40.     $string = 0;
  41.  
  42.     foreach (token_get_all($code) as $peak)
  43.     {
  44.         if (is_array($peak))
  45.         {
  46.             switch ($peak[0])
  47.             {
  48.                 case T_CURLY_OPEN:
  49.                 case T_DOLLAR_OPEN_CURLY_BRACES:
  50.                 case T_START_HEREDOC: ++$string; break;
  51.                 case T_END_HEREDOC: --$string; break;
  52.             }
  53.         }
  54.         else if ($string & 1)
  55.         {
  56.             switch ($peak)
  57.             {
  58.                 case '`':
  59.                 case '"': --$string; break;
  60.             }
  61.         }
  62.         else
  63.         {
  64.             switch ($peak)
  65.             {
  66.                 case '`':
  67.                 case '"': ++$string; break;
  68.  
  69.                 case '[': case '(': case '{': ++$braces; break;
  70.                 case ']': case ')': case '}':
  71.                     if ($string) --$string;
  72.                     else
  73.                     {
  74.                         --$braces;
  75.                         if ($braces < 0) break 2;
  76.                     }
  77.                 break;
  78.             }
  79.         }
  80.     }
  81.  
  82.     ob_start();
  83.     $line = NULL;
  84.     $valid = NULL;
  85.     $message = NULL;
  86.  
  87.     if (eval('?' . ">$code") == FALSE) $valid = FALSE;
  88.     else $valid = TRUE;
  89.  
  90.     $output = ob_get_contents();
  91.     ob_end_clean();
  92.  
  93.  
  94.     $regex = '/syntax\s+error,\s+(.+)\s+in\s+.+\s+on\s+line\s+(\d+)/Uis';
  95.     if (preg_match($regex, strip_tags($output), $match))
  96.     {
  97.         $message = $match[1];
  98.         $line = $match[2];
  99.     }
  100.     elseif ($string != $braces) $message = 'unbalanced braces';
  101.  
  102.     @ini_set('display_errors', $display);
  103.     @ini_set('log_errors', $log);
  104.     return array(
  105.             $output,
  106.             $valid,
  107.             $message,
  108.             $line
  109.     );
  110. }

el código que finalmente se expone es el original, y el que se cuantifica se hace vía function_code(), que nos devuelve una versión sin comentarios y "comprimida" de nuestra función original usando Reflection

espero esto ayude a dejar un poco mas claras las cosas, no se crean que lo estoy tomando muy a la ligera... de verdad que me esfuerzo, ¿pues no se nota? (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.