SlideShare una empresa de Scribd logo
1 de 53
Descargar para leer sin conexión
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	
  

Más contenido relacionado

Destacado (10)

Yii framework
Yii frameworkYii framework
Yii framework
 
yii framework
yii frameworkyii framework
yii framework
 
Yii framework
Yii frameworkYii framework
Yii framework
 
Introducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebIntroducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos Web
 
9.laravel
9.laravel9.laravel
9.laravel
 
10 slideshare-02-historia diseño
10 slideshare-02-historia diseño10 slideshare-02-historia diseño
10 slideshare-02-historia diseño
 
Yii Framework
Yii FrameworkYii Framework
Yii Framework
 
Cake PHP
Cake PHPCake PHP
Cake PHP
 
Entendiendo Yii
Entendiendo YiiEntendiendo Yii
Entendiendo Yii
 
CakePHP
CakePHPCakePHP
CakePHP
 

Similar a Andres Gutierrez

Web Services buscador de localizaciones de IP’s (Presentación)
Web Services buscador de localizaciones de IP’s (Presentación)Web Services buscador de localizaciones de IP’s (Presentación)
Web Services buscador de localizaciones de IP’s (Presentación)Pablo Pellegrinet
 
Pentest - El Arte de la Guerra
Pentest - El Arte de la GuerraPentest - El Arte de la Guerra
Pentest - El Arte de la GuerraLuis Cortes Zavala
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magentoOnestic
 
Aplicaciones escalables en Azure
Aplicaciones escalables en AzureAplicaciones escalables en Azure
Aplicaciones escalables en AzureGermán Küber
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Ricard Clau
 
In-Memory OLTP en SQL Server 2016
In-Memory OLTP en SQL Server 2016In-Memory OLTP en SQL Server 2016
In-Memory OLTP en SQL Server 2016Joseph Lopez
 
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidorBunsan: Cómo validamos 600 facturas por segundo en un miniservidor
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidorSoftware Guru
 
Webinar Gratuito: "Tomar Control de un Servidor con Armitage"
Webinar Gratuito: "Tomar Control de un Servidor con Armitage"Webinar Gratuito: "Tomar Control de un Servidor con Armitage"
Webinar Gratuito: "Tomar Control de un Servidor con Armitage"Alonso Caballero
 
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...SpanishPASSVC
 
MySQL de 1995 a 5.5
MySQL de 1995 a 5.5MySQL de 1995 a 5.5
MySQL de 1995 a 5.5juliomacr
 
Softonic Labs - Web Escalable
Softonic Labs - Web EscalableSoftonic Labs - Web Escalable
Softonic Labs - Web EscalableAlex Puig
 

Similar a Andres Gutierrez (20)

Virtualizacion mail server.pptx
Virtualizacion mail server.pptxVirtualizacion mail server.pptx
Virtualizacion mail server.pptx
 
Web Services buscador de localizaciones de IP’s (Presentación)
Web Services buscador de localizaciones de IP’s (Presentación)Web Services buscador de localizaciones de IP’s (Presentación)
Web Services buscador de localizaciones de IP’s (Presentación)
 
Despliegue de la solución de software
Despliegue de la solución de softwareDespliegue de la solución de software
Despliegue de la solución de software
 
Codemotion cacheandolanube
Codemotion cacheandolanubeCodemotion cacheandolanube
Codemotion cacheandolanube
 
Gapand2017 rediscahe
Gapand2017 rediscaheGapand2017 rediscahe
Gapand2017 rediscahe
 
Pentest - El Arte de la Guerra
Pentest - El Arte de la GuerraPentest - El Arte de la Guerra
Pentest - El Arte de la Guerra
 
Rendimiento en magento
Rendimiento en magentoRendimiento en magento
Rendimiento en magento
 
Aplicaciones escalables en Azure
Aplicaciones escalables en AzureAplicaciones escalables en Azure
Aplicaciones escalables en Azure
 
In-Memory OLTP en SQL Server 2014
In-Memory OLTP en SQL Server 2014In-Memory OLTP en SQL Server 2014
In-Memory OLTP en SQL Server 2014
 
Unidad i
Unidad iUnidad i
Unidad i
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
PresentacióN Tesis
PresentacióN TesisPresentacióN Tesis
PresentacióN Tesis
 
Presentacion Final
Presentacion FinalPresentacion Final
Presentacion Final
 
In-Memory OLTP en SQL Server 2016
In-Memory OLTP en SQL Server 2016In-Memory OLTP en SQL Server 2016
In-Memory OLTP en SQL Server 2016
 
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidorBunsan: Cómo validamos 600 facturas por segundo en un miniservidor
Bunsan: Cómo validamos 600 facturas por segundo en un miniservidor
 
Rendimiento extremo en php
Rendimiento extremo en phpRendimiento extremo en php
Rendimiento extremo en php
 
Webinar Gratuito: "Tomar Control de un Servidor con Armitage"
Webinar Gratuito: "Tomar Control de un Servidor con Armitage"Webinar Gratuito: "Tomar Control de un Servidor con Armitage"
Webinar Gratuito: "Tomar Control de un Servidor con Armitage"
 
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
24 HOP edición Español - Optimizacion de motores sql server desde el codigo h...
 
MySQL de 1995 a 5.5
MySQL de 1995 a 5.5MySQL de 1995 a 5.5
MySQL de 1995 a 5.5
 
Softonic Labs - Web Escalable
Softonic Labs - Web EscalableSoftonic Labs - Web Escalable
Softonic Labs - Web Escalable
 

Más de Colombia3.0

Maximiliano Firtman
Maximiliano FirtmanMaximiliano Firtman
Maximiliano FirtmanColombia3.0
 
Sorey Bibiana García
Sorey Bibiana GarcíaSorey Bibiana García
Sorey Bibiana GarcíaColombia3.0
 
Ricardo Suárez
Ricardo SuárezRicardo Suárez
Ricardo SuárezColombia3.0
 
Mentez / Juan Franco y Juan Roldan
Mentez / Juan Franco y Juan RoldanMentez / Juan Franco y Juan Roldan
Mentez / Juan Franco y Juan RoldanColombia3.0
 
Juan Pablo Crossley
Juan Pablo CrossleyJuan Pablo Crossley
Juan Pablo CrossleyColombia3.0
 
Jaime Andres Restrepo
Jaime Andres Restrepo  Jaime Andres Restrepo
Jaime Andres Restrepo Colombia3.0
 

Más de Colombia3.0 (20)

Javier Garzas
Javier GarzasJavier Garzas
Javier Garzas
 
Maximiliano Firtman
Maximiliano FirtmanMaximiliano Firtman
Maximiliano Firtman
 
Mateo Rojas
Mateo RojasMateo Rojas
Mateo Rojas
 
Esteban Sosnik
Esteban SosnikEsteban Sosnik
Esteban Sosnik
 
David Helgason
David HelgasonDavid Helgason
David Helgason
 
Thomas Inman
Thomas InmanThomas Inman
Thomas Inman
 
Sorey Bibiana García
Sorey Bibiana GarcíaSorey Bibiana García
Sorey Bibiana García
 
Roger Sessions
Roger SessionsRoger Sessions
Roger Sessions
 
Ricardo Suárez
Ricardo SuárezRicardo Suárez
Ricardo Suárez
 
Octavio Koulez
Octavio KoulezOctavio Koulez
Octavio Koulez
 
Octavio Koulesz
Octavio KouleszOctavio Koulesz
Octavio Koulesz
 
Naoki Yamamoto
Naoki YamamotoNaoki Yamamoto
Naoki Yamamoto
 
Mitch Gitelman
Mitch GitelmanMitch Gitelman
Mitch Gitelman
 
Mentez / Juan Franco y Juan Roldan
Mentez / Juan Franco y Juan RoldanMentez / Juan Franco y Juan Roldan
Mentez / Juan Franco y Juan Roldan
 
Lina Benavidez
Lina BenavidezLina Benavidez
Lina Benavidez
 
Juan Pablo Crossley
Juan Pablo CrossleyJuan Pablo Crossley
Juan Pablo Crossley
 
Jonathan Tarud
Jonathan TarudJonathan Tarud
Jonathan Tarud
 
Joao Azevedo
Joao AzevedoJoao Azevedo
Joao Azevedo
 
James Thurston
James ThurstonJames Thurston
James Thurston
 
Jaime Andres Restrepo
Jaime Andres Restrepo  Jaime Andres Restrepo
Jaime Andres Restrepo
 

Andres Gutierrez

  • 1. Phalcon PHP Framework escrito como extensión en C
  • 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. ¿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. ¿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 aprender C, 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 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
  • 10. Ayuda/Rendimiento Poca  ayuda  al   programador   Alta  ayuda  al   programador   Alta  ayuda  al   programador   Rendimiento   Mayor   Rendimiento   Mayor   Rendimiento   Menor  
  • 11. Las comparaciones son odiosas pero necesarias
  • 12.
  • 14. ¿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  
  • 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 por segundo 2500   2368   2000   1500   1000   862   727   762   #  PeDciones/sg   568   541   424   500   280   324   0  
  • 19. 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  
  • 20. 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  
  • 21. 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  
  • 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 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  
  • 24. 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  
  • 25.
  • 26. 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  
  • 27. 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  
  • 28. Micro Framework: Peticiones atendidas por segundo 3000   2551   2368   2500   2000   1500   #  PeDciones/sg   1134   1000   448   500   0   Silex   Slim   Phalcon   PHP  
  • 29. ¿Es posible desarrollar una 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
  • 34. Veamos un poco de código :]
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40. Al estar escrito en C, ¿cómo encuentro fácilmente un error?
  • 41.
  • 42. Implementaciones de PHP 4%   Zend  Engine   Hip  Hop/Quercus/ WebSmash/Phalanger   96%  
  • 43. Soy un programador perezoso, ¿Cómo Phalcon me ayuda a escribir menos código?
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 51.
  • 52.
  • 53. Gracias! <3 hhp://phalconphp.com     Síguenos  en  Twiher:  @phalconphp