Contenido

Consejos para mejorar la velocidad de nuestros scripts PHP

19 nov

+ 11

Algo que los desarrolladores debemos conocer es como hacer más optimo nuestro trabajo y aunque no siempre podamos (o sepamos) elegir la mejor opción para obtener mejores tiempos de respuesta y de procesamiento, nunca está de más conocerlos y mirar de ponerlos en práctica cuando podamos.

En PHP, hay muchas formas de hacer las cosas, pero unas son mejores que otras, en este artículo vemos cuales son algunas de esos métodos que usamos y que podríamos optimizar.

1. Multiples argumentos a echo()

echo() es una función, aunque un poco peculiar, y por ello debemos usar la forma más correcta de usarla.

//Lento
echo "hola" . $var . "adios";
//Rápido
echo "hola" , $var , "adios";
//resultados
Time for concatenation method: 37.83755 seconds
Time for multiple arguments method: 37.68789 seconds
Time saved: 0.15966 seconds; 0.396%

Si analizamos lo que está pasando aqui, es que en la primera llamada, además de mostrar por pantalla con echo(), estamos haciendo que se concatenen las 2 cadenas, mostrando el resultado. Algo que en este ejemplo no es significativo, pero que en ciertos proyectos con grandes cantidades de concatenaciones puede llegar a notarse la diferencia.

Por cierto, echo() es más rápido que print().

2. Reduce las llamadas a funciones

Es algo obvio, pero a veces no tenemos presentes que el llamar a funciones ocupamos una pequeña porción de procesador en interpretarlas, y por poco que sea, podemos ahorrarnos una cantidad perceptible de recursos.

$array = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
for($a = 0; $a < sizeof($array); $a++) {
	// Do something
}
//Resultados
Test 1 (sizeof() called 10, 001 times): 0.02784 seconds
Test 2 (sizeof() called 1 time): 0.01278 seconds
Time saved: 0.01506 seconds; 54.095%

10.000 iteraciones han hecho posible estos resultados.

3.Usa las variables cuando sean necesarias

El usar variables consume memoria, es evidente que se almacenan en algún sitio y ese sitio es la memoria del server. En muchos casos recurrimos a este sistema para hacer más fácil la parametrización de nuestros scripts:

$string = 'String for Output';
echo $string;
//Mejor así
echo 'String for Output';

 Esto nos da la flexibilidad de poder cambiar el contenido de nuestra variable sin tener que modificar el echo(), muy util para separar la configuración de la lógica de la aplicación. Pero en algunos casos algo innecesario. Si necesitamos usar este sistema, podríamos recurrir a unset() para eliminar la variable de memoria cuando terminemos de usarla.

4. Usa comillas simples

Esta no la sabía, siempre suelo usar comillas simples, pero es por los strings de Oracle y cogí el vicio. Al parece el usar comillas simples es más optimo que usar las dobles, esto es debido al sistema de parseo interno de PHP, y la forma de tratar las diferentes comillas.

//Mejor
$string = 'Hello';
//Peor
$string = "Hello";
//Resultados
Double Quotes: 51.74447 seconds
Single Quotes: 51.38412 seconds
Time saved: 0.36035 seconds; 0.696%

Se han asignado 50.000.000 de veces una variable para obtener estos tiempos. 

5.str_replace() vs ereg_replace() y preg_replace()

Entre estas 3 funciones str_replace() se desmarca sobre las demás debido a que no está pensado para funcionar con expresiones regulares y realizar su función mucho menor tiempo.

ereg_replace(): 26.65647 seconds
preg_replace(): 25.18324 seconds
str_replace(): 10.26872 seconds
Time saved (against ereg_replace()): 16.38775 seconds: 61.478%
Time saved (against preg_replace()): 14.91452 seconds: 59.224%

Las pruebas se han hecho reemplazando una palabra 5.000.000 de veces con cada una de las funciones.

¿Como hacer mis propias mediciones?

 Lo mejor para saber que usar y optimizar nuestros scripts sin duda es probarlo nosotros mismo, hacer las mediciones pertinentes. Para ello usaremos la función microtime() que nos permite obtener una marca de tiempo en micro-segundos para poder contabilizar el tiempo de ejecución de nuestras funciones.

$tiempo_inicio = microtime(true);

mifunciondelaostia();

$tiempo_final = microtime(true);
$tiempo = $tiempo_final - $tiempo_inicio;

echo "Ha tardado",$tiempo segundos;

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.