1. Búsqueda del frameworkBúsqueda del framework
ideal de PHPideal de PHP
1er
Encuentro de
Software Libre del Ecuador Yonel Meza Avila
y@doknos.com
2. • 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
¿Qué estamos buscando?
D
R
A
V
C
D
T
M
3. Historia
CakePHP Symfony Zend Framework
Patrón de diseño MVC MVC MVC (por elección)
1era
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
4. ¿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í
5. ¿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
6. ¿Cómo organizamos nuestro código?
ControladorControlador
VistaVista ModeloModelo
Cliente
Petición
Resultado
Lectura
Escritura
Lectura
Envío de información
Directa
Indirecta
(Patrón observador)
D A
7. CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
VISTA
CONTROLADOR
MODELO
Layout, template, helpers
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
¿Qué posibilidades tenemos?
D A C
8. CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
VISTA
CONTROLADOR
MODELO
Layout, template, helpers
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
Layouts
Layout
+
template template
Layout
Página
Final
=
D A C
9. CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
VISTA
CONTROLADOR
MODELO
Layout, template, helpers
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
D A C
¿Qué posibilidades tenemos?
10. CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
VISTA
CONTROLADOR
MODELO
Layout, template, helpers
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
Parte inteligente en las vistas
Template
Sf: Components
Zf: Actions
Lógica
Presentación (Partials)
D A C
11. CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
VISTA
CONTROLADOR
MODELO
Layout, template, helpers
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
D A C
¿Qué posibilidades tenemos?
12. CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: Modelos
Symfony: Objeto, tabla
ZF: definido por el desarrollador
VISTA
CONTROLADOR
MODELO
Layout, template, helpers
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: Elements
Symfony: Partials
ZF: Partials
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: No tiene
Symfony: Slots
ZF: Placeholders
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: Métodos
Symfony: Actions
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
CakePHP: No tiene
Symfony: Components
ZF: Actions
Posición de los bloques variables
Template
+
Layout
=Slot 1 (PH)
Slot 2 (PH)
Template
Slot 2
Slot1
Layout
Template
Slot 2
Slot1
D A C
13. ¿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
14. ● CakePHP: Scaffolds
● Fáciles de crear, poco personalizables
● Symfony: Admin
● Fáciles de crear, completamente personalizables,
incluyen filtros de datos
● Zend Framework: Ninguna
¿Necesitamos interfaces de administración?
D V
15. ● 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
Y si tenemos errores
D D
16. ● Tiempo de ejecución
● Internas
● Externas (Apache JMeter)
● Memoria utilizada
● Internas
¿Qué pruebas se realizaron?
R T M
17. ● 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
¿En qué se realizaron?
R T M
18. ● 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
¿De qué se trata la aplicación?
R T M
19. ¿Podemos medir tiempo de proceso?
R T
Cargar configuracionesCargar configuraciones
DespachadorDespachador
Censo de tiempoCenso de tiempo
Censo de tiempoCenso de tiempo
Controlador principal (index.php en raíz de la app)
Impresión de diferenciaImpresión de diferencia
Cliente (Petición)
Cliente (Respuesta)
20. Home page Albums Songs TOTAL
0
50
100
150
200
250
Tiempo de proceso
cf
sf
zf
ms
¿Qué obtuvimos en las pruebas internas?
R T
21. ¿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
22. Home Albums Songs Total
0
50
100
150
200
250
Tiempo de respuesta
cf
sf
zf
ms
R T
¿Qué obtuvimos en las pruebas externas?
(1 usuario)
23. Home Albums Songs Total
0.00
1.00
2.00
3.00
4.00
5.00
6.00
7.00
8.00
9.00
Rendimiento (peticiones por segundo)
cf
sf
zf
r/s
R T
¿Qué obtuvimos en las pruebas externas?
(1 usuario)
24. Home Albums Songs Total
0
200
400
600
800
1000
1200
Tiempo de respuesta
cf
sf
zf
ms
R T
¿Qué obtuvimos en las pruebas externas?
(10 usuarios)
25. Home Albums Songs Total
0.00
2.00
4.00
6.00
8.00
10.00
12.00
14.00
16.00
Rendimiento (peticiones por segundo)
cf
sf
zf
r/s
R T
¿Qué obtuvimos en las pruebas externas?
(10 usuario)
26. ¿Cuánto consume mi aplicación?
R M
Cargar configuracionesCargar configuraciones
DespachadorDespachador
Controlador principal (index.php en raíz de la app)
Impresión del máximoImpresión del máximo
Cliente (Petición)
Cliente (Respuesta)
Censo de memoriaCenso de memoria
27. ¿Qué obtuvimos?
Home page Albums Songs
0
2000
4000
6000
8000
10000
12000
Consumo de memoria (memory_get_peak_usage)
cf
sf
zf
kB
R M
28. ¿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
30. Búsqueda del frameworkBúsqueda del framework
ideal de PHPideal de PHP
¡Gracias por su atención!
1er
Encuentro de
Software Libre del Ecuador
Yonel Meza Avila y@doknos.com
www.doknos.com