Phalcon
PHP 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
•  Facilitar y aumentar la escalabilidad de
   proyectos en PHP sin aumentar la
   complejidad
¿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
¿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)	
  
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?
¿Cómo funcionan las
       extensiones de C?
1.  Las extensiones de C se cargan una sola
    vez cuando inicia el servidor junto con PHP
2.  La funcionalidad que provee las extensión
    está lista para usar desde cualquier archivo
    PHP
3.  El código no se interpreta en las
    extensiones, porque las extensiones están
    compiladas para una plataforma específica
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 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.
¿Cómo Phalcon es más rápido con respecto a
        los frameworks tradicionales?

                              Frameworks Tradicionales   Phalcon

Interpretación de cientos ó              Sí                No
miles de líneas en PHP

Cargar docenas de                        Sí                No
archivos por petición
Revisar la existencia de                 Sí                No
clases, funciones,
variables cada vez, en cada
petición
Realizar optimizaciones de              No                 Sí
bajo nivel para ganar
rendimiento
Ayuda/Rendimiento
Poca	
  ayuda	
  al	
  
programador	
  
                                                    Alta	
  ayuda	
  al	
  
                                                    programador	
  
                          Alta	
  ayuda	
  al	
  
                          programador	
  



Rendimiento	
  
  Mayor	
  
                                                    Rendimiento	
  
                                                      Mayor	
  
                          Rendimiento	
  
                            Menor	
  
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	
  Aplicación	
  (Hello!)	
  



        Tiempo	
  que	
  tarda	
  en	
  finalizar	
  la	
  peDción	
  
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
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	
  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)	
  
Peticiones atendidas por segundo

2500	
                                                                                        2368	
  


2000	
  

1500	
  

1000	
                                                                              862	
  
                                                                727	
     762	
                          #	
  PeDciones/sg	
  
                                            568	
     541	
  
                                  424	
  
 500	
        280	
     324	
  


     0	
  
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	
  
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	
  
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	
  
ORM Benchmark

mysql>	
  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)	
  
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	
  
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	
  
Consultar e imprimir 10 registros (Tiempo Total)
                  500 peticiones/10 concurrentes



2,500	
            2,217	
  

2,000	
  

1,500	
  
                                                   Tiempo/sg	
  

1,000	
  
                                    0,467	
  
0,500	
  

0,000	
  
            Doctrine	
  2	
     Phalcon	
  
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	
  
Micro Framework: Peticiones atendidas
             por segundo
3000	
  
                                                        2551	
  
                                           2368	
  
2500	
  

2000	
  

1500	
                                                             #	
  PeDciones/sg	
  
                            1134	
  

1000	
  
                448	
  
 500	
  

     0	
  
             Silex	
      Slim	
       Phalcon	
      PHP	
  
¿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)
•  Micro Frameworks (Slim, Silex, Limonade)
•  ORM (Object Relational Mappers) (Doctrine,
   Propel)
•  ODM (Object Document Mappers) (Doctrine)
•  Template Engines (Twig, Mustache, Smarty)
Componentes
1.     Dependency Injection/Inversion of Control (DI)
2.     HTTP Environment Request/Response
3.     MVC (Models/Views/Controllers)
4.     Cache (Memcached, Files, APC, Mongo)
5.     Routing
6.     Events Manager
7.     Session Handling
8.     Filter and Sanitize
9.     Flash Notifications
10.    Scaffolding
11.    Configuration
12.    Database
13.    Logging
14.    Template Engine (Volt)
15.    Multi-lingual apps
16.    Universal Class Loader
17.    Access Control Lists (ACL)
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
Phalcon/DB

•  MySQL
•  PostgreSQL
•  SQLite
Veamos un poco de código :]
Al estar escrito en C, ¿cómo
encuentro fácilmente un error?
Implementaciones de PHP


  4%	
  




                     Zend	
  Engine	
  

                     Hip	
  Hop/Quercus/
                     WebSmash/Phalanger	
  



           96%	
  
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

  • 1.
    Phalcon PHP Framework escritocomo extensión en C
  • 2.
    Objetivo •  Construir unverdadero 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.
    ¿Porqué? •  El usode 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.
    ¿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.
    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.
    ¿Cómo funcionan las extensiones de C? 1.  Las extensiones de C se cargan una sola vez cuando inicia el servidor junto con PHP 2.  La funcionalidad que provee las extensión está lista para usar desde cualquier archivo PHP 3.  El código no se interpreta en las extensiones, porque las extensiones están compiladas para una plataforma específica
  • 7.
    No debes aprenderC, se sigue programando en PHP!
  • 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.
    ¿Cómo Phalcon esmás rápido con respecto a los frameworks tradicionales? Frameworks Tradicionales Phalcon Interpretación de cientos ó Sí No miles de líneas en PHP Cargar docenas de Sí No archivos por petición Revisar la existencia de Sí No clases, funciones, variables cada vez, en cada petición Realizar optimizaciones de No Sí bajo nivel para ganar rendimiento
  • 10.
    Ayuda/Rendimiento Poca  ayuda  al   programador   Alta  ayuda  al   programador   Alta  ayuda  al   programador   Rendimiento   Mayor   Rendimiento   Mayor   Rendimiento   Menor  
  • 11.
    Las comparaciones sonodiosas pero necesarias
  • 13.
  • 14.
    ¿Qué se midecon un “Hola Mundo”? Tiempo  que  tarda  en  iniciar  el  framework   Lógica  de  Aplicación  (Hello!)   Tiempo  que  tarda  en  finalizar  la  peDción  
  • 15.
    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
  • 16.
    ab  –n  1000  –c  5  http://localhost/bench/phalcon/say/hello  
  • 17.
    [#]  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)  
  • 18.
    Peticiones atendidas porsegundo 2500   2368   2000   1500   1000   862   727   762   #  PeDciones/sg   568   541   424   500   280   324   0  
  • 19.
    Tiempo Promedio enlas 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  
  • 20.
    Número de ArchivosInterpretados por Petición 117   120   100   80   66   60   46   36   Número  Archivos   40   30   23   20   4   0  
  • 21.
    Memoria consumida porpetició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  
  • 22.
    ORM Benchmark mysql>  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)  
  • 23.
    Inserción de 10registros (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  
  • 24.
    Inserción de 10registros (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  
  • 26.
    Consultar e imprimir10 registros (Tiempo Total) 500 peticiones/10 concurrentes 2,500   2,217   2,000   1,500   Tiempo/sg   1,000   0,467   0,500   0,000   Doctrine  2   Phalcon  
  • 27.
    Consultar e imprimir10 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  
  • 28.
    Micro Framework: Peticionesatendidas por segundo 3000   2551   2368   2500   2000   1500   #  PeDciones/sg   1134   1000   448   500   0   Silex   Slim   Phalcon   PHP  
  • 29.
    ¿Es posible desarrollaruna aplicación solamente usando Phalcon?
  • 30.
    Á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)
  • 31.
    Componentes 1.  Dependency Injection/Inversion of Control (DI) 2.  HTTP Environment Request/Response 3.  MVC (Models/Views/Controllers) 4.  Cache (Memcached, Files, APC, Mongo) 5.  Routing 6.  Events Manager 7.  Session Handling 8.  Filter and Sanitize 9.  Flash Notifications 10.  Scaffolding 11.  Configuration 12.  Database 13.  Logging 14.  Template Engine (Volt) 15.  Multi-lingual apps 16.  Universal Class Loader 17.  Access Control Lists (ACL)
  • 32.
    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
  • 33.
  • 34.
    Veamos un pocode código :]
  • 40.
    Al estar escritoen C, ¿cómo encuentro fácilmente un error?
  • 42.
    Implementaciones de PHP 4%   Zend  Engine   Hip  Hop/Quercus/ WebSmash/Phalanger   96%  
  • 43.
    Soy un programadorperezoso, ¿Cómo Phalcon me ayuda a escribir menos código?
  • 50.
  • 53.
    Gracias! <3 hhp://phalconphp.com     Síguenos  en  Twiher:  @phalconphp