Agiliza tus scripts Php

Por el 1 de Enero de 2007

en: Programacion

A menudo cuando un desarrollador comienza a programar en Php, se siente que ha encontrado la herramienta perfecta para el rápido desarrollo de sitios webs dinámicos, incluso tiempo atras en el que que las características del lenguaje y la cantidad de funciones eran más escasas.

De un tiempo a esta parte el lenguaje a añadido extensiones y una gran popularidad. Desafortunadamente esto hace que para nuevos programadores sea mas dificil comprender algunos conceptos de este lenguaje y cometer numerosos errores de optimización, muchos de ellos son muy obvios pero no por ello dejan de ser importantes por la cantidad de veces en los que podemos incurrir dentro de un mismo script.

Veamos algunos de los más comunes y la explicación de porqué realentizan la ejecución de nuestro script.

Código lento (No recomendado) Código rápìdo (Recomendado) Explicación
$i++; ++$i; Ninguna razón
$i += 1; ++$i; Ninguna razón
rand($min,$max); mt_rand($min,$max); mt_rand es matemáticamente más veloz
$i = 0;
while($array[$i]){
        ++$i;
}
$i = 0;
$count = count($array);
while($i < $count){
        ++$i;
}
Probar si un array existe es más lento que probar que una variable es menor que otra
print ‘algo’; echo ‘algo’; echo no devuelve nada por el contrario print si lo hace
ob_start();
echo ‘algo’;
ob_end_flush();
ob_start();
print ‘algo’;
ob_end_flush();
echo no devuelve nada, print si lo hace y por lo tanto haciendo el echo se debe de evaluar dos veces
echo ‘algo (HTML, con etiquetas php)’; algo (HTML, con etiquetas php) Php es más lento que la salida directa en HTML
include(‘output/contain_no_php’); readfile(‘output/contain_no_php’); readfile devuelve directamente la salida de un fichero por el contrario include debe de evaluarlo por dos veces
echo “$variable cadena “; echo $variable.’cadena’; Las comillas simples no evaluan el contenido sin embargo las dobles comillas si lo hacen por lo que realentiza la ejecución del script
UNA_CONSTANTE; $una_variable; Ninguna razón
constant(‘UNA_CONSTANTE’); UNA_CONSTANTE; Ninguna razón
pi(); M_PI; Php crea una constante más rápido que el tiempo que tarda en calcular una función matemática, aplicar a todas aquellas constantes matemáticas existentes en Php
if($numero<0){
        $numero *= -1;
}

abs($numero); Siempre utilizar una función existente en Php antes de crearla por nosotros mismos
pow($x , $exp) + pow($x , $exp – 1);
$a*$b+$a*$c+$a*$d;
($x + 1) * pow($x , $exp – 1);
$a*($b+$c+$d);
Las operaciones en formato expandido son habitualmente más lentas
if($a == $b)

if($a === $b)

La triple = no necesita convertir los tipos de datos
pow($x, 0.5); sqrt($x); Ninguna razón
1/2;

0.5;

Php realiza la división entre 1 y 2 mientras por el contrario el segundo caso es directamente el resultado y no necesita ser procesado
if($a == 30); if(30 == $a); El segundo caso nos devolverá un error en caso de que hayamos cometido un error tipográfico del tipo ‘=’ en vez de ‘==’ , por lo tanto es mejor esta opción ya que podremos encontrar el error fácilmente

Enlaces Relacionados

Generar passwords accesibles con Php
Codigo Fuente del generador de passwords en PHP
Ejemplo de ejecución del script
PHP y MySql una estrecha relación
5 cosas que no sabías hacer con PHP
Generar documentos OpenOffice con PHP
Nueva versión de Notepad++
Hola Mundo!
Identificar las consultas más lentas de MySql
Crea sencillas gráficas con MySql
Programar un script PHP para saber quién está en línea
Consejos para optimizar PHP
Editando en Opera páginas web en tiempo real

5 Respuestas a Agiliza tus scripts Php

Avatar

Anónimo

4 de Enero de 2007 a las 3:24 pm

Muy buen artí­culo. Algunas cosas no las sabí­a, pero otras tengo que aclarar algo:

$i++ no es lo mismo que ++$i ya que $i++ muestra el valor de $i y luego lo aumenta, mientras que ++$i es al reví©s.

Salir de PHP para producir una salida en HTML queda estí©ticamente peor y visiblemente más difí­cil de comprender, al menos yo y mucha gente que conozco lo ve así­.

El == convierte tipos y el triple === no, pero resulta que if (30 == “30″) darí­a true y if (30===”30″) daria false, cuando todos sabemos que tanto una como otra son verdad.

Así­ que hay que aclarar lo siguiente:

1. Usar ++$i en lugar de $i++ cuando únicamente queramos aumentar la variable en 1 sin usarla en salida por pantalla.
2. Procurar separar el código HTML del PHP sin hacer cambios de PHP y HTML, ya que queda antiestí©tico y luego te va a resultar a ti y a cualquiera muy difí­cil la lectura.
3. Usar === en lugar de == cuando sepamos a ciencia cierta que: a)Queremos comprobación tanto de valor como de tipos; b) Sepamos que el ambos tipos van a ser iguales siempre.

Por lo demás, muy bueno, me lo apunto ;)

Avatar

Anónimo

5 de Enero de 2007 a las 2:53 am

He llegado aquí­ a traves de la lista de php-es, donde se trataba í©ste tema últimamente.

Me ha gustado el artí­culo por algunas curiosidades como la constante de PI o la diferí©ncia entre echo o print cuando se guarda la salida en buffer.

Iba a hacer las mismas aclaraciones que en el comentario anterior, pero hay otro caso, include no es lo mismo que readfile.

Readfile produce la salida directa al navegador. Por lo tanto solo debe usarse en includes que contengan únicamente HTML. En caso de contener PHP, se enviará el código PHP al usuario en vez de interpretarlo.

NO FUNCIONA:
readfile(“conec.php”); // donde conec realiza la conexion enlazada con $link
$res = mysql_query(“SELECT * FROM usuaris LIMIT 1″,$link) or die(mysql_error($link));

ES CORRECTO:
include(“conec.php”);
$res = mysql_query(“SELECT * FROM usuaris LIMIT 1″,$link) or die(mysql_error($link));

Un saludo,
Pere Picornell

Avatar

Pablo

8 de Mayo de 2007 a las 2:40 pm

En el primer comentario dice:
” El == convierte tipos y el triple === no, pero resulta que if (30 == “30″) darí­a true y if (30===”30″) daria false, cuando todos sabemos que tanto una como otra son verdad. ”

Creo que diciento en esto: 30 no es igual a “30″. En cuestión de valor puede ser, pero son dos tipos distintos de datos. El primero es número y el segundo es un string, por ende son distintos.

Se supone que dos datos son iguales si sus valores son iguales, y sus entre su valor tenemos implícito el tipo de dato, si una cadena, si es número, si es valor lógico, etc.

También no estoy de acuerdo (aunque esto ya es una cuestión de gustos), en la forma de programar.

Yo prefieron esto:

if (true)
{
?>

Esto es mi salida

< ?=$sContenido;?>

?>
}

a esto:

if (true)
{
echo “

Esto es mi salida

“;
echo “

“;
echo “
“;
echo “

“;
echo “

“;
echo “

” . $sContenido. “

“;
?>
}

La primera forma, con salidas a HTML es a mi criterio y para mi gusto, mucho más simple de leer y mucho más fácil de mantener.

Avatar

Elena

5 de Febrero de 2008 a las 8:17 am

Avatar

puto

8 de Noviembre de 2009 a las 2:06 pm

No sirven los links

Dejar un comentario

Patrocinadores

¿Interesado en patrocinar TuFunción?

Suscripción

Primera División