Búsqueda del framework ideal de framework

Post on 13-Jun-2015

1.289 views 1 download

Transcript of Búsqueda del framework ideal de framework

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