PhalconPHP Framework escrito como      extensión en C
Objetivo•  Construir un verdadero framework de alto   rendimiento para PHP que sea fácil de usar   al mismo tiempo•  Facil...
¿Porqué?•  El uso de framework se ha convertido en   obligatorio para el desarrollo PHP   profesional•  Los frameworks ofr...
¿Cómo funciona PHP?                             Revisar	  que	  el	  programa	  sea	  correcto	  a	  nivel	  sintácDco	   ...
Rendimiento en frameworks       tradicionales•  Muchos archivos con clases y funciones son   leídos en cada petición, la c...
¿Cómo funcionan las       extensiones de C?1.  Las extensiones de C se cargan una sola    vez cuando inicia el servidor ju...
No debes aprender C, se sigue   programando en PHP!
¿Qué ofrece Phalcon?•  Es un framework por componentes y full stack   al tiempo, cualquier componente se puede   usar sin ...
¿Cómo Phalcon es más rápido con respecto a        los frameworks tradicionales?                              Frameworks Tr...
Ayuda/RendimientoPoca	  ayuda	  al	  programador	                                                      Alta	  ayuda	  al	 ...
Las comparaciones son odiosas pero           necesarias
MVC	  Benchmark	  
¿Qué se mide con un “Hola Mundo”?       Tiempo	  que	  tarda	  en	  iniciar	  el	  framework	                  Lógica	  de...
Entorno de Pruebas•  Sistema Operativo: Mac	  OS	  X	  Lion	  10.7.4   Servidor Web: Apache httpd 2.2.22•  PHP: 5.3.15 + A...
ab	  –n	  1000	  –c	  5	  http://localhost/bench/phalcon/say/hello	  
[#]	  ab	  -­‐n	  1000	  -­‐c	  5	  http://localhost/bench/phalcon/?_url=say/hello	  This	  is	  ApacheBench,	  Version	  ...
Peticiones atendidas por segundo2500	                                                                                     ...
Tiempo Promedio en las 1000 Peticiones           3,5	  3,5	                       3	     3	  2,5	                        2...
Número de Archivos Interpretados por                Petición            117	  120	  100	    80	                66	    60	 ...
Memoria consumida por petición           3,5	  3,5	                       3	     3	  2,5	     2	                       1,7...
ORM Benchmarkmysql>	  desc	  products;	  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-...
Inserción de 10 registros (Tiempo Total)                    500 peticiones/10 concurrentes                   5,922	  6,000...
Inserción de 10 registros (Memoria Petición)                       500 peticiones/10 concurrentes                   7,424	...
Consultar e imprimir 10 registros (Tiempo Total)                  500 peticiones/10 concurrentes2,500	            2,217	  ...
Consultar e imprimir 10 registros (Memoria Petición)          500 peticiones/10 concurrentes                    9,984	  10...
Micro Framework: Peticiones atendidas             por segundo3000	                                                        ...
¿Es posible desarrollar una aplicación    solamente usando Phalcon?
Áreas de Acción•  Full Stack Frameworks (Cake, Yii, Symfony,   Zend)•  Componentes ligeramente acoplados   (Symfony/Zend)•...
Componentes1.     Dependency Injection/Inversion of Control (DI)2.     HTTP Environment Request/Response3.     MVC (Models...
Phalcon/ORM•     ORM (Object-Relational-Mapper)     •  Meta-Datos (Memoria, Sesión, APC, Files)     •  Validadores (Tipos,...
Phalcon/DB•  MySQL•  PostgreSQL•  SQLite
Veamos un poco de código :]
Al estar escrito en C, ¿cómoencuentro fácilmente un error?
Implementaciones de PHP  4%	                       Zend	  Engine	                       Hip	  Hop/Quercus/                ...
Soy un programador perezoso,¿Cómo Phalcon me ayuda a escribir         menos código?
hhp://try.phalconphp.com	  
Gracias! <3     hhp://phalconphp.com	                        	  Síguenos	  en	  Twiher:	  @phalconphp	  
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Andres Gutierrez
Upcoming SlideShare
Loading in …5
×

Andres Gutierrez

2,000 views

Published on

Ponencia en Colombia 3.0

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,000
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
24
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Andres Gutierrez

  1. 1. PhalconPHP Framework escrito como extensión en C
  2. 2. Objetivo•  Construir un verdadero framework de alto rendimiento para PHP que sea fácil de usar al mismo tiempo•  Facilitar y aumentar la escalabilidad de proyectos en PHP sin aumentar la complejidad
  3. 3. ¿Porqué?•  El uso de framework se ha convertido en obligatorio para el desarrollo PHP profesional•  Los frameworks ofrecen herramientas y facilidades que hacen que nuestro trabajo sea más divertido
  4. 4. ¿Cómo funciona PHP? Revisar  que  el  programa  sea  correcto  a  nivel  sintácDco   (LINT)  APC,  Xcache,  eAccelerator   Construir  árbol  sintácDco    (consume  memoria)   Interpretar  (ejecutar)  el  árbol  construído  (bytecode)  (Zend  Engine)  
  5. 5. Rendimiento en frameworks tradicionales•  Muchos archivos con clases y funciones son leídos en cada petición, la continua lectura de disco puede impactar el rendimiento•  La totalidad del código proporcionada por estos frameworks es interpretada en cada petición•  El código de un framework permanece igual entre una petición y otra, ¿porqué cargarlo e interpretarlo una y otra vez?
  6. 6. ¿Cómo funcionan las extensiones de C?1.  Las extensiones de C se cargan una sola vez cuando inicia el servidor junto con PHP2.  La funcionalidad que provee las extensión está lista para usar desde cualquier archivo PHP3.  El código no se interpreta en las extensiones, porque las extensiones están compiladas para una plataforma específica
  7. 7. No debes aprender C, se sigue programando en PHP!
  8. 8. ¿Qué ofrece Phalcon?•  Es un framework por componentes y full stack al tiempo, cualquier componente se puede usar sin depender de otros o desarrollar una aplicación completa con él•  Phalcon está directamente engranado con PHP accediendo directamente a sus recursos internos•  Generación de código, helpers, template engine, scaffolding, etc.
  9. 9. ¿Cómo Phalcon es más rápido con respecto a los frameworks tradicionales? Frameworks Tradicionales PhalconInterpretación de cientos ó Sí Nomiles de líneas en PHPCargar docenas de Sí Noarchivos por peticiónRevisar la existencia de Sí Noclases, funciones,variables cada vez, en cadapeticiónRealizar optimizaciones de No Síbajo nivel para ganarrendimiento
  10. 10. Ayuda/RendimientoPoca  ayuda  al  programador   Alta  ayuda  al   programador   Alta  ayuda  al   programador  Rendimiento   Mayor   Rendimiento   Mayor   Rendimiento   Menor  
  11. 11. Las comparaciones son odiosas pero necesarias
  12. 12. MVC  Benchmark  
  13. 13. ¿Qué se mide con un “Hola Mundo”? Tiempo  que  tarda  en  iniciar  el  framework   Lógica  de  Aplicación  (Hello!)   Tiempo  que  tarda  en  finalizar  la  peDción  
  14. 14. Entorno de Pruebas•  Sistema Operativo: Mac  OS  X  Lion  10.7.4 Servidor Web: Apache httpd 2.2.22•  PHP: 5.3.15 + APC 3.1.13 (Without Xdebug)•  CPU: 3.06 Ghz Intel Core 2 Duo•  Memoria Principal: 4GB  1333  MHz  DDR3•  Disco Duro: 500GB SCSI/SAS HDD
  15. 15. ab  –n  1000  –c  5  http://localhost/bench/phalcon/say/hello  
  16. 16. [#]  ab  -­‐n  1000  -­‐c  5  http://localhost/bench/phalcon/?_url=say/hello  This  is  ApacheBench,  Version  2.3  <$Revision:  655654  $>  Copyright  1996  Adam  Twiss,  Zeus  Technology  Ltd,  http://www.zeustech.net/  Licensed  to  The  Apache  Software  Foundation,  http://www.apache.org/    Benchmarking  localhost  (be  patient)    Server  Software:                Apache/2.2.21  Server  Hostname:                localhost  Server  Port:                        80    Document  Path:                    /bench/phalcon/?_url=say/hello  Document  Length:                16  bytes    Concurrency  Level:            5  Time  taken  for  tests:      0.402  seconds  Complete  requests:            1000  Failed  requests:                0  Write  errors:                      0  Total  transferred:            187000  bytes  HTML  transferred:              16000  bytes  Requests  per  second:        2489.26  [#/sec]  (mean)  Time  per  request:              2.009  [ms]  (mean)  Time  per  request:              0.402  [ms]  (mean,  across  all  concurrent  requests)  Transfer  rate:                    454.58  [Kbytes/sec]  received    Connection  Times  (ms)                              min    mean[+/-­‐sd]  median      max  Connect:                0        0      0.3            0              4  Processing:          1        2      1.5            1            36  Waiting:                0        1      1.4            1            30  Total:                    1        2      1.6            2            37    Percentage  of  the  requests  served  within  a  certain  time  (ms)      50%            2      66%            2      75%            2      80%            2      90%            3      95%            4      98%            5      99%            7    100%          37  (longest  request)  
  17. 17. Peticiones atendidas por segundo2500   2368  2000  1500  1000   862   727   762   #  PeDciones/sg   568   541   424   500   280   324   0  
  18. 18. Tiempo Promedio en las 1000 Peticiones 3,5  3,5   3   3  2,5   2,3   2   1,8   1,7  1,5   1,3   1,2   1,2   Tiempo  Promedio  sg   1   0,4  0,5   0  
  19. 19. Número de Archivos Interpretados por Petición 117  120  100   80   66   60   46   36   Número  Archivos   40   30   23   20   4   0  
  20. 20. Memoria consumida por petición 3,5  3,5   3   3  2,5   2   1,75  1,5   1,25   1,1   1   Memoria  (MB)   1   0,75  0,5   0  
  21. 21. ORM Benchmarkmysql>  desc  products;  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  Field                        |  Type                          |  Null  |  Key  |  Default  |  Extra                    |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  |  id                              |  int(10)  unsigned  |  NO      |  PRI  |  NULL        |  auto_increment  |  |  product_types_id  |  int(10)  unsigned  |  NO      |  MUL  |  NULL        |                                |  |  name                          |  varchar(70)            |  NO      |          |  NULL        |                                |  |  price                        |  decimal(16,2)        |  NO      |          |  NULL        |                                |  |  active                      |  char(1)                    |  YES    |          |  NULL        |                                |  +-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐+  5  rows  in  set  (0.00  sec)  
  22. 22. Inserción de 10 registros (Tiempo Total) 500 peticiones/10 concurrentes 5,922  6,000  5,000  4,000   2,375   Tiempo  Total/sg  3,000  2,000  1,000  0,000   Doctrine  2   Phalcon  
  23. 23. Inserción de 10 registros (Memoria Petición) 500 peticiones/10 concurrentes 7,424  8,000  7,000  6,000  5,000   Memoria  (MB)  4,000  3,000  2,000   0,728  1,000  0,000   Doctrine  2   Phalcon  
  24. 24. Consultar e imprimir 10 registros (Tiempo Total) 500 peticiones/10 concurrentes2,500   2,217  2,000  1,500   Tiempo/sg  1,000   0,467  0,500  0,000   Doctrine  2   Phalcon  
  25. 25. Consultar e imprimir 10 registros (Memoria Petición) 500 peticiones/10 concurrentes 9,984  10,000   9,000   8,000   7,000   6,000   Memoria  (MB)   5,000   4,000   3,000   2,000   0,768   1,000   0,000   Doctrine  2   Phalcon  
  26. 26. Micro Framework: Peticiones atendidas por segundo3000   2551   2368  2500  2000  1500   #  PeDciones/sg   1134  1000   448   500   0   Silex   Slim   Phalcon   PHP  
  27. 27. ¿Es posible desarrollar una aplicación solamente usando Phalcon?
  28. 28. Áreas de Acción•  Full Stack Frameworks (Cake, Yii, Symfony, Zend)•  Componentes ligeramente acoplados (Symfony/Zend)•  Micro Frameworks (Slim, Silex, Limonade)•  ORM (Object Relational Mappers) (Doctrine, Propel)•  ODM (Object Document Mappers) (Doctrine)•  Template Engines (Twig, Mustache, Smarty)
  29. 29. Componentes1.  Dependency Injection/Inversion of Control (DI)2.  HTTP Environment Request/Response3.  MVC (Models/Views/Controllers)4.  Cache (Memcached, Files, APC, Mongo)5.  Routing6.  Events Manager7.  Session Handling8.  Filter and Sanitize9.  Flash Notifications10.  Scaffolding11.  Configuration12.  Database13.  Logging14.  Template Engine (Volt)15.  Multi-lingual apps16.  Universal Class Loader17.  Access Control Lists (ACL)
  30. 30. Phalcon/ORM•  ORM (Object-Relational-Mapper) •  Meta-Datos (Memoria, Sesión, APC, Files) •  Validadores (Tipos, Regex, Únicos) •  Relaciones Unidireccionales y Bidireccionales •  Llaves foráneas virtuales •  Transacciones •  Generadores de Modelos •  Eventos/Hooks de Modelos •  Migraciones •  PHQL (Phalcon Query Language) •  Behaviors
  31. 31. Phalcon/DB•  MySQL•  PostgreSQL•  SQLite
  32. 32. Veamos un poco de código :]
  33. 33. Al estar escrito en C, ¿cómoencuentro fácilmente un error?
  34. 34. Implementaciones de PHP 4%   Zend  Engine   Hip  Hop/Quercus/ WebSmash/Phalanger   96%  
  35. 35. Soy un programador perezoso,¿Cómo Phalcon me ayuda a escribir menos código?
  36. 36. hhp://try.phalconphp.com  
  37. 37. Gracias! <3 hhp://phalconphp.com    Síguenos  en  Twiher:  @phalconphp  

×