A partir del artículo publicado por Enrique sobre rendimiento y programación orientada a objetos, me he animado a compartir las lecciones aprendidas que hemos sacado Iñaki Ortiz y yo, de nuestra experiencia tras reescribir www.precriticas.com con el Zend Framework. Precriticas es un proyecto con más de 5000 visitantes únicos diarios (y picos de 8.000) que generan diariamente más de 25.000 recargas de la página.
Lecciones aprendidas:
- La optimización extrema del código (cambiar print por echos, etc…) apenas mejora el rendimiento.
- La POO disminuye el rendimiento, pero facilita tanto la programación que es totalmente IMPRESCINDIBLE.
- No hay que caer en la sobreingeniería (overengineering), ni matar moscas a cañonazos. Quizá no sean soluciones muy elegantes, pero a veces un par de arrays y unas funciones son mucho más eficaces que complejos patrones de diseño orientado a objetos.
Las dos cosas que más eficaces resultan para mejorar rendimiento son:
- evitar SQL´s excesivamente costosas (subquerys, demasiados inner join´s) o bucles de SQL´s que se repiten una enorme cantidad de veces innecesariamente. (ojo a prepared statement).
- cachear requests (páginas enteras) o las sql´s costosas. (ojo a zend_cache).
Y un apunte sobre Zend_cache. Es muy potente, pero nos ha dado problemas. Al principio funcionó bien, pero si decides cachear muchas páginas, genera miles de archivos y el acceso al sistema de archivos se convierte en un cuello de botella… Ahora mismo no lo estamos utilizando aunque planeamos cachear algunas páginas.
Y una última cosa: a veces uno está pensando en complicadas soluciones (por ejemplo para buscar sql´s costosas) y entonces llega la gente que sabe, y te descubre que basta con activar un log.
Fuente: http://www.programania.net/patrones-de-diseno/lecciones-aprendidas-sobre-rendimiento-en-php/