Voy a pasar a dar una lista rápida de las cosas que hay que hacer o tener en cuenta, se trata de consejos bazados en la experiencia y en la investigación.
Estilo Procedural:
Empecemos con algo que dijo leodorf (creador de php): “Stay with procedural style unless something is truly an object” es decir: “mantengamos el estilo procedural a no ser que algo sea realmente un objeto”.
Mysql:
Cuando estamos desarrollando un sitio web al cual accederan muchisimas personas, es vital optimizar la relación entre php y mysql, entonces la consigna es reducir al máximo la cantidad de datos transmitidos entre estos dos componentes, y además que la transmisión se haga rápidamente. Esto lo vamos a realizar de la siguiente manera:
1-Seleccionar sólo los campos que vamos a utilizar. Es decir no utilizar select *…
2-Estructura de datos relacional, siempre y cuando no atente contra el rendimiento.
3-Claves primarias de tipo numéricas son mejores.
4-Optimizar los tamaños de los campos en las tablas mysql.(sólo lo necesario, muchas veces no tiene sentido tener una clave primaria autoincremental de tipo entera de una longitud de 11!!!)
5-Utilización de índices: la regla general es utilizar índices en cada campo que se consulte muchas veces, es decir que figure muchas veces en la cláusula where. Atención: la clave primaria ya es un ínidice.
6-Desnormalizar en algunos casos. Este es algo controvertido… bueno la idea es, por ejemplo si tenemos un campo CV (currículo vitae) que se guarda en un campo blob o text, y es muy pesado, conviene guardarlo en otra tabla, que se llame por ejemplo cvs y esa misma tendrá 2 campos, uno la clave primaria del usuario y el otro el campo CV. De esa forma alivianamos tremendamente la tabla usuarios.
7-No guardar imágenes en la base de datos!
PHP, Motores de Plantillas, Código Separado del Diseño:
Recuerdo que cuando apenas empezaba con php me gustaba muchisimo ir mezclando el código html con el de php, es decir en el medio del html ir colocando ?> cuando lo necesitaba. Pues bien, esto nunca lo volveremos a hacer!
Al principio es un poco más complicado programar separando totalmente el código php del diseño en html, pero las ventajas de arquitectura son tremendas, existe una gran flexibilidad entre el diseño y el código, la posibilidad de tener una web multi-idioma (sin duplicar la web, jeje tramposos), implementar compresión, cache, etc.
En fín, esto hará que el código se ejecute más rápido porque no tiene que compilarse muchas veces.
Esto es programar con un motor de plantillas propio o de terceros, en otro post comentaré como hacer uno propio sencillo y potente.
Uso de Cache en nivel de PHP:
Supongamos que para entregar una página (por ejemplo la portada) necesitamos conectarnos a una base de datos y realizar 30 consultas. Ahora supongamos en en el mismo momento tan sólo 100 personas intentan acceder a la portada, esto se traduce en 100 conexiones y 3000 consultas! todo para armas la misma página para los 100 visitantes… que desperdicio de recursos. Bueno la solución a esto es construir la página una sola vez y luego devolverla a los 99 restantes.
La lógica es bastante sencilla y también la implementación (si separamos código de diseño):
Comprobamos si existe una versión cacheada de la portada, si no existe generamos la página y antes de hacer un echo de la página, la escribimos en la cache. Si ya existe una versión cacheada, comprobamos que sea lo suficientemente jóven, si no lo és, lo mismo: generamos la página y antes de hacer un echo de la página, la escribimos en la cache. Si existe una versión cacheada y ésta es lo suficientemente jóven la leemos y la imprimimos con un echo.
Seguiré editando este post más adelante…