Cita:
Iniciado por Gustavo72 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)- $start, 4);
$media = round($end / $times, 4);
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 originalfunction function_code($name)
{
$callback = new ReflectionFunction($name);
$file = file($callback->getFilename()); $code = array_slice($file, $callback->getStartLine() -1, $callback->getEndLine()); $code = '<' . '?' . "php $code";
$output = '';
{
else
{
switch ($token[0]) {
case T_COMMENT:
case T_OPEN_TAG:
case T_CLOSE_TAG:
case T_DOC_COMMENT:
break;
case T_WHITESPACE:
$output .= ' ';
break;
default:
$output .= $token[1];
break;
}
}
}
return $output;
}
// http://www.php.net/manual/en/function.php-check-syntax.php#86466
function php_syntax($code)
{
$display = @ini_set('display_errors',1);
$braces = 0;
$string = 0;
{
{
switch ($peak[0])
{
case T_CURLY_OPEN:
case T_DOLLAR_OPEN_CURLY_BRACES:
case T_START_HEREDOC: ++$string; break;
case T_END_HEREDOC: --$string; break;
}
}
else if ($string & 1)
{
switch ($peak)
{
case '`':
case '"': --$string; break;
}
}
else
{
switch ($peak)
{
case '`':
case '"': ++$string; break;
case '[': case '(': case '{': ++$braces; break;
case ']': case ')': case '}':
if ($string) --$string;
else
{
--$braces;
if ($braces < 0) break 2;
}
break;
}
}
}
$line = NULL;
$valid = NULL;
$message = NULL;
if (eval('?' . ">$code") == FALSE) $valid = FALSE; else $valid = TRUE;
$regex = '/syntax\s+error,\s+(.+)\s+in\s+.+\s+on\s+line\s+(\d+)/Uis';
{
$message = $match[1];
$line = $match[2];
}
elseif ($string != $braces) $message = 'unbalanced braces';
@ini_set('display_errors', $display); $output,
$valid,
$message,
$line
);
}
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? (: