2009-10-28

Optimiza Codeigniter

CodeIgniter es un genial framework, pensado para ofrecer un alto rendimiento, claro está con una óptima configuración.

Como ya hemos comentado en otras ocasiones CodeIgniter cumple perfectamente el fin de cualquier framework, una estructura definida que de soporte a un proyecto web y ayude a que este proyecto sea organizado y desarrollado, veamos los puntos clave a tener en cuenta a la hora de optimizar la configuración de CodeIgniter.

Ver Ejemplo (Benchmark para CodeIgniter)

Modelo Vista Controlador (MVC)

Seguramente hayas oido e incluso utilizado algún MVC (Modelo Vista Controlador), de lo que se trata en este tipo de modelos es de repetirse lo menos posible y hacer una separación entre la lógica de la aplicación y su presentación:

  • El modelo representa la estructura de datos, a menudo con clases que contienen funciones que te ayudan a insertar, eliminar y actualizar la información de la base de datos.
  • La vista es la información que se presenta al usuario, una vista es a menudo una página web en sí misma, pero en CodeIgniter una vista también puede llegar a ser un fragmento de la página web (pie, cabecera, contenido principal, etc…).
  • El controlador sirve de intermediario entre los Modelos y las Vistas, y es el encargado de coordinar la petición y generar la página web.

Teniendo estos tres puntos claros podemos pasar a ver el diagrama de flujo de CodeIgniter.

Diagrama de Flujo de CodeIgniter

Configuración básica de CodeIgniter

Modelo Vista Controlador
  1. El index.php sirve inicializa el nucleo de CodeIgniter.
  2. El enrutador examina la petición HTTP y determina que se debe de hacer.
  3. Si existe la cache devuelve el archivo HTML sin pasar por el sistema , ahorrandos la carga que ello conlleva.
  4. Seguridad, antes de que se cargue el controlador se filtra los datos enviados para que estos sean fiables.
  5. El controlador carga el modelo, librerias, plugins, helpers y todos los recursos necesarios para satisfacer la petición.
  6. Una vez la Vista está renderizada es enviada al navegador si la cache está habilitada se almacena el resultado en cache para la próxima vez que esta URL sea servida.

Configuración avanzada de CodeIgniter con librería Sparks

Sparks es una librería que nos permite solventar dos deficiencias con las que nos podemos encontrar a la hora de afrontar un proyecto basado en CodeIgniter.

1. Mejora la cache que únicamente permite cachear páginas completas.
2. Podremos incluir “vistas” dentro de “vistas”.

Para entender este supuesto tenemos que imaginar que necesitamos que la página tenga un módulo de autentificación, al devolver sólo HTMl sería imposible hacer convivir la cache y el módulo de autentificación, con esta librería solucionamos el problema pero el diagrama de flujo cambia un poco.

Modelo Vista Controlador
  1. El index.php sirve inicializa el nucleo de CodeIgniter.
  2. El enrutador examina la petición HTTP y determina que se debe de hacer.
  3. Seguridad, antes de que se cargue el controlador se filtra los datos enviados para que estos sean fiables.
  4. El controlador comprueba si existe cache, en caso afirmativo la devuelve pero al hacer la comprobación en este punto podemos llegar a pasar datos dinámicos a la vista (podríamos conseguir que funcionará un módulo de autentificación aún con la cache habilitada), si no existe cache carga el modelo, librerias, plugins, helpers y todos los recursos necesarios para satisfacer la petición.
  5. Una vez la Vista está renderizada es enviada al navegador si la cache está habilitada se almacena el resultado en cache para la próxima vez que esta URL sea servida.

Optimizando CodeIgniter

En nuestro caso vamos a partir de una configuración de CodeIgniter + Sparks (ver Diagrama de Flujo 2).

Vamos a ver cuáles son los distintos pasos para llegar a una configuración inicial óptima.

Urls Limpias

Para poder utilizar CodeIgniter con Urls amigables necesitaremos crear un .htaccess con la siguiente configuración:


RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]



# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php

Idioma español

Para poder trabajar con diferentes idiomas que nos faciliten la traducción de cadenas en el sitio debemos crear una carpeta (”spanish”) dentro de “languages” de este modo podremos manejar diferentes cadenas traducidas y establecer por defecto el idioma que más nos convenga.

Configuración de la base de datos

Para interactuar con la base de datos tendremos que añadir los datos de conexión en “/system/application/config/database.php”.

Scaffolding

El scaffolding es un método para construir aplicaciones basadas en bases de datos, esta técnica está soportada por algunos frameworks caso de CodeIgniter (tipo MVC), en el cuál el programador escribe una especificación que describe cómo debe ser usada la base de datos.

Luego el compilador utiliza esa especificación para generar el código que la aplicación usará para crear, leer, actualizar y eliminar registros de la base de datos, esto es conocido cómo CRUD (create, read, update, delete).

Para utilizarlo en CodeIgniter necesitamos una “palabra secreta” que podemos modificar en “/system/apliccation/routes/config.php”.

Librería avanzada para cache

Sparks que nos permite solucionar algunos problemas en aplicaciones que requieren de una estructura de cache más compleja.

Benchmark

Para la fase de desarrollo de la aplicación es muy recomendable mostrar los datos de rendimiento de la aplicación.

CodeIgniter viene muy bien preparado para esta fase de optimización y debugging, Profiler Class, gracias a esta clase podremos mostrar:

  1. Uso de memoria PHP
  2. Carga de clases
  3. Tiempo de ejecución de controladores
  4. Tiempo total de ejecución
  5. Datos de URL
  6. Datos de variables GET
  7. Datos de variables POST
  8. Información de conexión a base de datos
  9. Información de ejecución de consultas

Como siempre se dice una imagen vale más que mil palabras… este sería el resultado de nuestro CodeIgniter perfectamente preparado para comenzar a desarrollar nuestro sitio web.

Ver Ejemplo

Benchmark CodeIgniter

Enlaces Interesantes

Web CodeIgniter
Documentación CodeIgniter
Wiki CodeIgniter
Download CodeIgniter

Fuente: tufuncion.com

No hay comentarios: