Optimización de código PHP

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

Sin comentarios
Ha habido un error en el envío
Comentario enviado. Será revisado por la moderación antes de ser publicado.

Deja tu comentario

Tu nombre:
Tu email:
Tu comentario:
Nuestra página web utiliza cookies propias y de terceros, para realizar el análisis de la navegación de los usuarios y así poder mejorar nuestros servicios. Si continúas navegando, consideramos que aceptas su uso. Puedes cambiar la configuración u obtener más información aquí