Cuando tenemos planeado hacer una aplicación web que va a hacer un trabajo intensivo de operaciones, base de datos, ficheros, etc. (por ejemplo página corporativa o de comercio electrónico) debemos plantearnos la velocidad final que tendrá con una alta carga de visitas diarias.
Por ello, vamos a explicar algunos trucos y consejos con ejemplos para poder escribir nuestro código PHP optimizado y por tanto nuestras aplicaciones corran más rápido.
Cadenas de texto
Usar echo en vez de print
Es más rápido hacer uso de la función echo que de la función print
echo “Hola”; // Más rápido print “Hola”;
Evitar concatenar texto innecesariamente y utilizar múltiples echos
Es mejor realizar dos salidas de texto con dos echos diferentes que concatenar texto y después producir la salida.
echo “Bienvenido”; echo $usuario; // Más rápido echo “Bienvenido”.$usuario;
Saber si una cadena de texto está vacía
Es más rápido saber si una variable está vacía con empty que saber si la longitud en número de caracteres es cero con strlen.
if (empty($cadena)) echo “vacía”; // Más rápida if (strlen($s) == 0) echo “vacía”;
Substituir texto
La manera más rápida para substituir texto es con strtr y no con str_replace o preg_replace.
$salida = strtr("abd","d","c"); // Más rápida $salida = str_replace("d","c","abd"); $salida = preg_replace("/d/","c","abd");
Saber si una cadena está contenida en otra
La función strpos es más rápida y ocupa menos memoria que strstr
if(strpos("Hola","o")!==false) echo "sí"; // Más rápida $esta_contenida = strstr("Hola","o"); if(!empty($esta_contenida)) echo "sí";
Variables y arrays
Uso de variables locales
Es más rápido y eficiente en memoria trabajar con variables locales dentro de una función que con una variable de instancia de un objeto, declarada como global o sin definir:
class objeto { private $c; public function __Construct() { $this->c=0; } public function prueba() { // Inicialización global $a; $b = 0; // Incremento $a++; $b++; // Más rápida $this->c++; $d++; } }
Coste de memoria
Deberemos declarar variables que vayamos a usar. Si vamos a usar una variable con valores temporales podemos llamarla $auxiliar y así no declarar muchas variables diferentes que sólo usamos una vez.
Las variables que ocupen mucho espacio en memoria, por ejemplo un array muy grande, deberemos borrarlas cuando no se vayan usar con la función unset.
Calcular la longitud de un array antes de recorrerlo
Es más rápido recorrer un array de la siguiente forma
$icount = count($lista); for($i=0;$i<$icount;$i++) { ... }
que de ésta
for($i=0;$i<count($lista);$i++) { ... }
ya que el cálculo de count se realiza tantas veces como posiciones tenga el array.
Acceder correctamente a un índice no númerico
Debemos acceder a los índices no numéricos de un array especificándolo con comillas
echo $lista[0]['nombre']; // Más rápido echo $lista[0][nombre];
Funciones y objetos
Hacer uso de las funciones predefinidas en PHP
Las funciones incluidas en PHP siempre serán mucho más rápidas que las que podamos hacer nosotros
Uso de include y require
Es más rápido hacer uso de include o require que include_once o require_once.
Funciones declaradas en objetos hijos son más rápidos que los heredados
Una función declarada en un objeto hijo es más rápida que una función heredada de un objeto padre.
Bases de datos
Ordenar los resultados de múltiples consultas
Cuando tenemos que hacer múltiples consultas SQL que terminen siendo pesadas, es mejor realizar el procesamiento de ordenación mediante la función usort o similares que mediante SQL. Un ejemplo acerca de esto podéis leer en el siguiente artículo de como Digg consiguió optimizar su web notablemente mediante estos procedimientos.
Comentarios