Búsqueda del framework ideal de PHP 1 er Encuentro de Software Libre del Ecuador Yonel Meza Avila y@doknos.com
Qué estamos buscando? D Para el desarrollador: A C V D Arquitectura adecuada Facilidad para realizar cambios (módulos y look&feel) Velocidad de desarrollo Fácil depuración R Para el rendimiento del sistema: T M Bajo tiempo de ejecución Baja cantidad de memoria utilizada
Historia CakePHP Symfony Zend Framework Patrón de diseño MVC MVC MVC (por elección) 1 era versión 2005 (Michal Tatarynowicz) 2005 (Fabien Potencier) 2006 (Zend?) Origen USA Francia USA Licencia MIT MIT BSD Estable actual 1.3.5 1.4.8 1.10.8
De qué disponemos? CakePHP Symfony Zend Framework Manejo AJAX Prototype y Script.aculo.us JQuery Dojo ORM Propio (Patrón Data Mapper) Doctrine(*) y Propel No (Table and Row data gateway) Pruebas Sí Sí Sí Cache Sí Sí Sí Versión del PHP 5 y 4 5 5 i18n y L10n Sí Sí Sí
Qué más tenemos? CakePHP: Pocas funcionalidades integradas en el core Pocos plugins en la comunidad Symfony: Cantidad media de funcionalidades en el core (por encima de lo mínimo necesario) Gran cantidad de plugins en la comunidad Zend: Gran cantidad de funcionalidades en el core (a veces más de las deseadas) Poca cantidad de plugins en la comunidad
Cómo organizamos nuestro código? Cliente Petición Directa Indirecta (Patrón observador) Resultado Controlador Envío de información Lectura Escritura Vista Lectura Modelo D A
Qué posibilidades tenemos? CONTROLADOR MODELO CakePHP: Modelos Symfony: Objeto, tabla ZF: definido por el desarrollador CakePHP: Métodos CakePHP: No tiene Symfony: Actions Symfony: Components Layout, template, helpers VISTA CakePHP: Elements Symfony: Partials ZF: Partials CakePHP: No tiene Symfony: Components CakePHP: No tiene Symfony: Slots ZF: Placeholders D A C
Layouts CONTROLADOR MODELO Layout CakePHP: Métodos Symfony: Actions CakePHP: Modelos Symfony: Objeto, tabla ZF: definido por el desarrollador + template CakePHP: Layout No tiene Symfony: Components = template Layout, template, helpers VISTA CakePHP: Elements Symfony: Partials ZF: Partials CakePHP: No tiene Symfony: Components CakePHP: Página No tiene Final Symfony: Slots ZF: Placeholders D A C
Qué posibilidades tenemos? CONTROLADOR MODELO CakePHP: Modelos Symfony: Objeto, tabla ZF: definido por el desarrollador CakePHP: Métodos CakePHP: No tiene Symfony: Actions Symfony: Components Layout, template, helpers VISTA CakePHP: Elements Symfony: Partials ZF: Partials CakePHP: No tiene Symfony: Components CakePHP: No tiene Symfony: Slots ZF: Placeholders D A C
Parte inteligente en las vistas CONTROLADOR MODELO CakePHP: Modelos Symfony: Objeto, tabla ZF: definido por el desarrollador Template Sf: CakePHP: Components Métodos CakePHP: No tiene Symfony: Zf: Actions Actions Symfony: Components Lógica Layout, template, helpers VISTA CakePHP: Elements Symfony: Partials ZF: Partials CakePHP: Presentación No tiene (Partials) Symfony: Components CakePHP: No tiene Symfony: Slots ZF: Placeholders D A C
Qué posibilidades tenemos? CONTROLADOR MODELO CakePHP: Modelos Symfony: Objeto, tabla ZF: definido por el desarrollador CakePHP: Métodos CakePHP: No tiene Symfony: Actions Symfony: Components Layout, template, helpers VISTA CakePHP: Elements Symfony: Partials ZF: Partials CakePHP: No tiene Symfony: Components CakePHP: No tiene Symfony: Slots ZF: Placeholders D A C
Posición de los bloques variables CONTROLADOR MODELO Template CakePHP: Métodos Symfony: Actions Slot 1 (PH) Slot 2 (PH) Layout, template, helpers CakePHP: Modelos Symfony: Objeto, tabla ZF: definido por el desarrollador + Slot 1 Layout Layout CakePHP: No tiene Symfony: Components Template Template = Slot 1 Slot 2 Slot 2 VISTA CakePHP: Elements Symfony: Partials ZF: Partials CakePHP: No tiene Symfony: Components CakePHP: No tiene Symfony: Slots ZF: Placeholders D A C
Qué necesitamos para crear un modelo? CakePHP: Poco Creación de archivos,configuración de los los modelos, relaciones. Symfony: Nada Solo comando en una terminal, configuraciones pequeñas Zend Framework: Mucho Creación de archivos, configuración de los los modelos, relaciones, implementación de métodos de escritura, lectura, actualizaciones, etc. D V
Necesitamos interfaces de administración? CakePHP: Scaffolds Fáciles de crear, poco personalizables Symfony: Admin Fáciles de crear, completamente personalizables, incluyen filtros de datos Zend Framework: Ninguna D V
Y si tenemos errores CakePHP: Poco Solo sentencias SQL ejecutadas a través de los modelos Symfony: Completo posee un barra de información completa: configuración de la aplicación, módulos de la vista ejecutados, sentencias SQL ejecutadas a través de los modelos y logs, memoria y tiempo utilizados en la corrida Zend Framework: Mínimo solo modificación al formato de var_dump D D
Qué pruebas se realizaron? Tiempo de ejecución Internas Externas (Apache JMeter) Memoria utilizada Internas R T M
En qué se realizaron? Máquina host: Intel i5 M430 2.27 Ghz Memoria 4GB DDR3 1067MHz HD SATA II 5400 rpm Maquina virtual 2 CPUs Memoria 1GB Debian Lenny R T M
De qué se trata la aplicación? 3 módulos: Principal: mínimo procesamiento Módulo albums: búsqueda en una sola tabla e impresión paginada Módulo songs: búsqueda en dos tablas relacionadas e impresión paginada R T M
Podemos medir tiempo de proceso? Cliente (Petición) Controlador principal (index.php en raíz de la app) Censo de tiempo Cargar configuraciones Despachador Despachador Censo de tiempo Impresión de diferencia R T Cliente (Respuesta)
Qué obtuvimos en las pruebas internas? 250 Tiempo de proceso 200 ms 150 100 cf sf zf 50 0 Home page Albums Songs TOTAL R T
De qué otra forma se podría medir el tiempo? Apache JMeter es una aplicación Open Source, desarrollada en Java y diseñada para realizar pruebas funcionales y de rendimiento a diferentes tipos de aplicaciones. Pruebas realizadas: 1 usuario, múltiples peticiones consecutivas 10 usuarios simultáneos, múltiples peticiones consecutivas R T
Qué obtuvimos en las pruebas externas? (1 usuario) 250 Tiempo de respuesta 200 ms 150 100 cf sf zf 50 0 Home Albums Songs Total R T
Qué obtuvimos en las pruebas externas? (1 usuario) r/s 9.00 8.00 7.00 6.00 5.00 4.00 3.00 2.00 1.00 0.00 Rendimiento (peticiones por segundo) Home Albums Songs Total cf sf zf R T
Qué obtuvimos en las pruebas externas? (10 usuarios) 1200 Tiempo de respuesta ms 1000 800 600 400 200 cf sf zf 0 Home Albums Songs Total R T
Qué obtuvimos en las pruebas externas? (10 usuario) 16.00 Rendimiento (peticiones por segundo) r/s 14.00 12.00 10.00 8.00 6.00 4.00 2.00 cf sf zf 0.00 Home Albums Songs Total R T
Cuánto consume mi aplicación? Cliente (Petición) Controlador principal (index.php en raíz de la app) Cargar configuraciones Despachador Despachador Censo de memoria Impresión del máximo R M Cliente (Respuesta)
Qué obtuvimos? 12000 Consumo de memoria (memory_get_peak_usage) kb 10000 8000 6000 4000 2000 cf sf zf 0 Home page Albums Songs R M
Quién ganó? Para el desarrollador: Arquitectura adecuada Facilidad para realizar cambios (módulos y look&feel) Velocidad de desarrollo Fácil depuración Para el rendimiento del sistema: Bajo tiempo de ejecución Baja cantidad de memoria utilizada
Dónde podemos encontrar información? CakePHP: www.cakephp.org www.cakedc.com Symfony: www.symfony-project.org Zend Framework: framework.zend.com
Búsqueda del framework ideal de PHP Gracias por su atención! Yonel Meza Avila y@doknos.com 1 er Encuentro de Software Libre del Ecuador www.doknos.com