Credit image

¿Te gusta el diseño web? ¡Echa un vistazo a la documentación de LenguajeCSS.com!

10 consejos para recodificar una web

Cuando nos dedicamos a la programación de un sitio web, llegará un momento en el que tenemos que renovar la estructura (aquí hablamos de HTML), la presentación (hablamos de CSS) y la codificación y programación interna (hablamos de PHP).

A continuación una serie de consejos para depurar y realizar una recodificación y rediseño efectivo:

1. Realinear, no rediseñar

Aunque en muchas ocasiones hay necesidad de un rediseño profundo, como resultado de un cambio de estrategia debido a algún factor especial, por norma general es mucho mejor mantener el objetivo de realineación que el de rediseño.

Esto proporciona un efecto más positivo de presentación, en el que estamos manteniendo la mayoría de los elementos en su lugar original (no despista a los usuarios), renovandolo visualmente.

En A List Apart se puede encontrar un claro ejemplo de este punto: Buenos diseñadores rediseñan, Grandes diseñados realinean.

2. Calcula el tiempo que tarda en cargar tu web

A pesar de tener otros sistemas externos como Pingdom, en este caso me refiero al tiempo de generación de código, internamente.

La forma tradicional es aquella en la que, mediante un timestamp UNIX capturado al final de todo, le restamos otro capturado al inicio. Generalmente se utiliza la función microtime.

NOTA: A partir de PHP5, a esta función se le puede pasar un booleano como parámetro para indicar que devuelva un número flotante que indique los microsegundos. En caso contrario devuelve una lista de parámetros (microsegundos y segundos). Ojo a los que aún usen PHP4.

3. Calcula la memoria utilizada en tu web

Análogamente al punto anterior, sería ideal establecer un echo temporal que nos vaya avisando de la memoria consumida en el procesamiento de nuestro script PHP. También podemos establecer unos puntos de control para saber que partes consumen demasiado. Ver punto 6 posterior (Profiling o Debugger).

Para calcular la memoria nos ayudaremos de la función memory_get_usage de PHP. En otros artículos como ¿Cuánta memoria RAM consume mi servidor? o Reducir uso de CPU y memoria del servidor hablo más sobre el tema.

4. La función isset()

Una buena técnica de programación es comprobar siempre la existencia de las variables con la función isset(), una función que nos devuelve un booleano (verdadero si existe la variable o falso en caso contrario), pudiendonos saltar fragmentos de código (y sus correspondientes recursos de proceso) en el caso de que ciertas variables no existan.

Pueden utilizarse para evaluar la existencia de varias variables en cortocircuito, esto es, con una lista de variables, desde que encuentre una que no exista, devuelve FALSE.

5. La directiva error_reporting()

Unos buenos amigos en PHP, son los niveles de error. Con ellos podremos establecer la forma de detección de errores en nuestro código de una manera sencilla y fácil.

En el fichero php.ini se puede establecer de forma general, aunque quizás es más práctico utilizar la funcion error_reporting() para hacerlo en tiempo de ejecución. Con el parámetro E_ALL mostrará todos los errores y warnings en el fichero error_log. Ver punto 8 posterior (error_log).

En Niveles de error PHP puedes encontrar una lista de todos los niveles posibles.

6. Profiling o Debugger

Utiliza un sistema de profiling o depuración de código. Un Profiler es un sistema que se ubica entre el programador y la máquina y le va informando al primero con las estructuras apropiadas y ciertas estadísticas del funcionamiento del código.

Generalmente, los buenos programadores ya hacen buen código. Pero los programadores que usan profilers son aún mejores. Extensiones como APD (Advanced PHP Debugger) pueden ayudarnos mucho, ya que permiten crear hasta una estructura árbol con las funciones utilizadas y el tiempo o memoria consumida.

En LinuxJournal podemos ver algunos ejemplos del APD y la técnica de Profiling en general.

7. Complejidad

Los bucles. Uno de los aspectos más básicos de la programación, y no por ello de los más sencillos, es reducir la complejidad de los procedimientos que llevamos a cabo.

Para ello, lo mejor es partir de la idea más simple y genérica: Localiza todos los bucles (for, while, foreach...) e intenta realizar cuantas operaciones puedas (funciones) fuera del bucle.

Un ejemplo típico es el siguiente bucle:

while (strlen($a) < ($b+$c)) {
echo "valor b: $b c: $c";
$b++;
$c++;
}

Como podemos ver, la variable $a no se modifica dentro del bucle, por lo tanto la función strlen($a) (que da la longitud de la cadena $a) siempre devolverá la misma cantidad en todas las iteraciones del bucle.

La complejidad se reduciría en el siguiente ejemplo:

$d = strlen($a);
while ($d < ($b+$c)) {
echo "valor b: $b c: $c";
$b++;
$c++;
}

Evidentemente, este ejemplo es algo inapreciable. Pero con funciones más complejas y extensas, el resultado puede notarse bastante.

8. El fichero error_log

A parte del fichero access_log de Apache, donde quedan registradas todas las peticiones HTTP de los diferentes usuarios, existe otro fichero muy interesante e importante para estrategias de depuración, error_log.

Dependiendo del nivel de error establecido (Ver punto 5) serán volcados distintos tipos de error, entre los que destaco los siguientes:

  • PHP Notice: Avisos poco importantes como petición de ficheros inexistentes, variables no definidas...
  • PHP Warning: Errores importantes como permisos, funciones no definidas, ejecuciones terminadas...
  • PHP Fatal error: Errores graves como finalización por memoria insuficiente, etc...
  • ModSecurity: Errores de seguridad. Ver artículo ModSecurity.

9. Inclusiones y exclusiones

Otro de los puntos importantes en la programación web es saber excluir o incluir partes de código que son o no necesarias.

Un ejemplo: En el apartado que muestra los artículos por categoría un blog, no es necesario funciones o código para mostrar comentarios, o en un artículo que tiene menos de 25 comentarios (suponiendo que 25 es el máximo por página) no es necesario las funciones para paginación. En muchos casos, esto puede disminuir el proceso de tiempo y memoria consumida en gran proporción.

Además, organizando un poco la codificación se puede evitar el uso de funciones include_once o require_once (incluir si no han sido ya incluidas) en favor de sus respectivas include y require puede ahorrar bastantes recursos.

10. Consultas SQL sin buffer

Generalmente, para la recuperación de consultas SQL en PHP (hablamos de la gestión de una base de datos MySQL) se utiliza mysql_query(). Sin embargo, en ciertos casos se puede hacer uso de la función mysql_unbuffered_query().

Las diferencias es que, al contrario que la primera, la segunda función no utiliza buffer para almacenar todas las filas resultantes de la consulta. Esto produce un ahorro de memoria significativo y también mayor rapidez, ya que permite comenzar a trabajar nada más devuelva la primera fila (no es necesario esperar a que termine por completo).

Es importante recalcar que con este tipo de recuperación no se pueden anidar varias consultas dentro de otras y que tampoco se pueden utilizar funciones como mysql_num_rows() ni mysql_data_seek().

Más o menos estos son los pasos que me han parecido más importantes para recalcar en la recodificación de una aplicación web. Como habrán visto, Emezeta blog ha «sufrido» una en los últimos días, y aunque el cambio de diseño no es demasiado grande, el de rendimiento si debería serlo.

Escrito por Manz, el , en programacion. Comentarios recibidos: 10.

10 comentarios de lectores
Abel
Abel
1

Excelentes consejos! Tambien usando extensiones en el navegador como Firebug podemos ir viendo el tiempo de carga de cada petición... Digo, es buena forma de ir probrando lo que vayamos haciendo. Por cierto, si se usa Ajax, ¿qué es mejor, regresar los datos en un XML y mostrarlos con javascript haciendo un parsing (DOM), o generar todo en PHP y solo mostrarlo con javascript?

Pablo
Pablo
2

Simplemente genial, se agradece mucho la informacion. Voy a seguir investigando principalmente sobre la directiva error_reporting que la conozco pero no en profundida y ahora con esta entrada me recordaste que necesito un repaso/estudio sobre esto. Saludos :D

Mon
Mon
3

Gracias, eres un hacha :) Habia ciertas funciones que no conocía pero comenzaré a utilizarlas que tienen buena pinta. Con PHP me gusta desarrollar con objetos y me suele dar resultado, pq a pesar de consumir algo más de memoria del server en un principio hay mucho más control. También es cierto que suelo hacer aplicaciones web complejas, por lo que necesito dicho control. Saludetes varios.

InKiLiNo
InKiLiNo
4

Muy buenos consejos, yo estoy realineando mi blog y voya usar más de uno ;)

Albert
Albert
5

Te has pasado a Movistar!!!

Santiago
Santiago
6

Felicitaciones por este exelente articulo y por el rediseño de tu blog :) Tengo una duda desde hace algun tiempo: Hay alguna manera práctica y sistemática de separar el diseño sin javascript del enriquecido? Esto lo digo porqu cada vez las páginas web utilizan mas recursos ajax, y no quiero terminar haciendo una web para ajax y otra html plano (como hicieron los de gmail). Y aunque use todo condigo no obstrucivo, sigo liandro un poco. Tal vez una buena solucion seria dividir todo en partes separadas (ejemplo, los comentarios) y luego llamar a esa parte por ajax o sino usar el sistema de templates para unir todo en un html. Bueno, tal vez conozcas una forma mas comoda que no se me haya ocurrido. Muchisimas gracias por tu trabajo, ayuda y esfuerzo!

Dr. Bizarre
Dr. Bizarre
7

No cabe duda, diario aprendernos algo nuevo. Excelente recurso.

Nacho 001
Nacho 001
8

No hay vuelta que darle, en este blog siempre se aprende algo, ¡Muy bien hecho! :D Por cierto, muy bueno el diseño del sitio, aunque es casi similar al anterior, es impresionante como una cabecera puede cambiar el aspecto del sitio, ya de entrada cuando lo vi me impacto. Y después claro, el cambio en los comentarios y un poco en el sidebar.... espectacular!! Tienes un blog que vale oro, nunca lo dejes, ni lo vendas como hacen muchos. ;)

Pepe
Pepe
9

Muchas gracias por los consejos, en este mismo momento los estoy empezando a aplicar y a hacer las revisiones correspondientes. Saludos.

MARIUXI
MARIUXI
10

quiero que la foto de mis gemelas de 14 meses salga en la portada

Publica tu opinión

Si lo deseas, puedes utilizar el siguiente formulario para publicar tu opinión o responder a alguna de las existentes:

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.