Post on 13-Jun-2015
Búsqueda del framework Búsqueda del framework ideal de PHPideal de PHP
1er Encuentro de Software Libre del Ecuador Yonel Meza Avila
y@doknos.com
• 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
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
¿De qué disponemos?
CakePHP Symfony Zend Framework
Manejo AJAX Prototype y Script.aculo.us
JQuery Dojo
ORMPropio
(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?
ControladorControlador
VistaVista ModeloModelo
Cliente
Petición
Resultado
Lectura Escritura
Lectura
Envío de información
Directa
Indirecta (Patrón observador)
D A
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
VIS
TAC
ON
TR
OL
AD
OR
MO
DE
LO
Layout, template, helpers
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Slots
ZF: Placeholders
CakePHP: No tieneSymfony: 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
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
VIS
TAC
ON
TR
OL
AD
OR
MO
DE
LO
Layout, template, helpers
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Slots
ZF: Placeholders
CakePHP: No tieneSymfony: 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
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
VIS
TAC
ON
TR
OL
AD
OR
MO
DE
LO
Layout, template, helpers
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Slots
ZF: Placeholders
CakePHP: No tieneSymfony: 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?
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
VIS
TAC
ON
TR
OL
AD
OR
MO
DE
LO
Layout, template, helpers
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Slots
ZF: Placeholders
CakePHP: No tieneSymfony: 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: ComponentsZf: Actions
Lógica
Presentación (Partials)
D A C
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
VIS
TAC
ON
TR
OL
AD
OR
MO
DE
LO
Layout, template, helpers
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Slots
ZF: Placeholders
CakePHP: No tieneSymfony: 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?
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
CakePHP: ModelosSymfony: Objeto, tabla
ZF: definido por el desarrollador
VIS
TAC
ON
TR
OL
AD
OR
MO
DE
LO
Layout, template, helpers
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: ElementsSymfony: Partials
ZF: Partials
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Components
ZF: Actions
CakePHP: No tieneSymfony: Slots
ZF: Placeholders
CakePHP: No tieneSymfony: 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
Slo
t 1
Layout
Template
Slot 2
Slo
t 1
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
● 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
● 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
● Tiempo de ejecución● Internas● Externas (Apache JMeter)
● Memoria utilizada● Internas
¿Qué pruebas se realizaron?
R T M
● 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
● 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
¿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)
Home page Albums Songs TOTAL0
50
100
150
200
250
Tiempo de proceso
cfsfzfm
s¿Qué obtuvimos en las pruebas internas?
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
Home Albums Songs Total0
50
100
150
200
250
Tiempo de respuesta
cfsfzfm
s
R T
¿Qué obtuvimos en las pruebas externas?(1 usuario)
Home Albums Songs Total0.00
1.00
2.00
3.00
4.00
5.00
6.00
7.00
8.00
9.00
Rendimiento (peticiones por segundo)
cfsfzfr/
s
R T
¿Qué obtuvimos en las pruebas externas?(1 usuario)
Home Albums Songs Total0
200
400
600
800
1000
1200
Tiempo de respuesta
cfsfzfm
s
R T
¿Qué obtuvimos en las pruebas externas?(10 usuarios)
Home Albums Songs Total0.00
2.00
4.00
6.00
8.00
10.00
12.00
14.00
16.00
Rendimiento (peticiones por segundo)
cfsfzfr/
s
R T
¿Qué obtuvimos en las pruebas externas?(10 usuario)
¿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
¿Qué obtuvimos?
Home page Albums Songs0
2000
4000
6000
8000
10000
12000
Consumo de memoria (memory_get_peak_usage)
cfsfzfkB
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 Bú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