Búsqueda del framework ideal de framework

30

Click here to load reader

Transcript of Búsqueda del framework ideal de framework

Page 1: 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

[email protected]

Page 2: Búsqueda del framework ideal de framework

• 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

Page 3: Búsqueda del framework ideal de framework

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

Page 4: Búsqueda del framework ideal de framework

¿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í

Page 5: Búsqueda del framework ideal de framework

¿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

Page 6: Búsqueda del framework ideal de framework

¿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

Page 7: Búsqueda del framework ideal de framework

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

Page 8: Búsqueda del framework ideal de framework

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

Page 9: Búsqueda del framework ideal de framework

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?

Page 10: Búsqueda del framework ideal de framework

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

Page 11: Búsqueda del framework ideal de framework

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?

Page 12: Búsqueda del framework ideal de framework

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

Page 13: Búsqueda del framework ideal de framework

¿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

Page 14: Búsqueda del framework ideal de framework

● 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

Page 15: Búsqueda del framework ideal de framework

● 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

Page 16: Búsqueda del framework ideal de framework

● Tiempo de ejecución● Internas● Externas (Apache JMeter)

● Memoria utilizada● Internas

¿Qué pruebas se realizaron?

R T M

Page 17: Búsqueda del framework ideal de framework

● 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

Page 18: Búsqueda del framework ideal de framework

● 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

Page 19: Búsqueda del framework ideal de framework

¿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)

Page 20: Búsqueda del framework ideal de framework

Home page Albums Songs TOTAL0

50

100

150

200

250

Tiempo de proceso

cfsfzfm

s¿Qué obtuvimos en las pruebas internas?

R T

Page 21: Búsqueda del framework ideal de framework

¿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

Page 22: Búsqueda del framework ideal de framework

Home Albums Songs Total0

50

100

150

200

250

Tiempo de respuesta

cfsfzfm

s

R T

¿Qué obtuvimos en las pruebas externas?(1 usuario)

Page 23: Búsqueda del framework ideal de framework

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)

Page 24: Búsqueda del framework ideal de framework

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)

Page 25: Búsqueda del framework ideal de framework

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)

Page 26: Búsqueda del framework ideal de framework

¿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

Page 27: Búsqueda del framework ideal de framework

¿Qué obtuvimos?

Home page Albums Songs0

2000

4000

6000

8000

10000

12000

Consumo de memoria (memory_get_peak_usage)

cfsfzfkB

R M

Page 28: Búsqueda del framework ideal de framework

¿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

Page 29: Búsqueda del framework ideal de framework

¿Dónde podemos encontrar información?

● CakePHP: ● www.cakephp.org● www.cakedc.com

● Symfony:● www.symfony-project.org

● Zend Framework:● framework.zend.com

Page 30: Búsqueda del framework ideal de framework

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 [email protected]

www.doknos.com