Post on 05-Dec-2014
description
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?
APC, Xcache, eAccelerator
Interpretar (ejecutar) el árbol construído (bytecode) (Zend Engine)
Revisar que el programa sea correcto a nivel sintácDco (LINT)
Construir árbol sintácDco (consume memoria)
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.
Frameworks Tradicionales Phalcon
Interpretación de cientos ó miles de líneas en PHP
Sí No
Cargar docenas de archivos por petición
Sí No
Revisar la existencia de clases, funciones, variables cada vez, en cada petición
Sí No
Realizar optimizaciones de bajo nivel para ganar rendimiento
No Sí
¿Cómo Phalcon es más rápido con respecto a los frameworks tradicionales?
Poca ayuda al programador
Rendimiento Mayor
Alta ayuda al programador
Rendimiento Menor
Alta ayuda al programador
Rendimiento Mayor
Ayuda/Rendimiento
Las comparaciones son odiosas pero necesarias
MVC Benchmark
Tiempo que tarda en iniciar el framework
Lógica de Aplicación (Hello!)
Tiempo que tarda en finalizar la peDción
¿Qué se mide con un “Hola Mundo”?
• 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
Entorno de Pruebas
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
0
500
1000
1500
2000
2500
280 324 424
568 541 727 762
862
2368
# PeDciones/sg
Tiempo Promedio en las 1000 Peticiones
0
0,5
1
1,5
2
2,5
3
3,5 3,5
3
2,3
1,8 1,7
1,3 1,2 1,2
0,4
Tiempo Promedio sg
Número de Archivos Interpretados por Petición
0
20
40
60
80
100
120 117
66
46 36
30 23
4
Número Archivos
Memoria consumida por petición
0
0,5
1
1,5
2
2,5
3
3,5 3,5
3
1,75
1,25 1,1 1 0,75
Memoria (MB)
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)
ORM Benchmark
Inserción de 10 registros (Tiempo Total) 500 peticiones/10 concurrentes
0,000
1,000
2,000
3,000
4,000
5,000
6,000
Doctrine 2 Phalcon
5,922
2,375 Tiempo Total/sg
Inserción de 10 registros (Memoria Petición) 500 peticiones/10 concurrentes
0,000
1,000
2,000
3,000
4,000
5,000
6,000
7,000
8,000
Doctrine 2 Phalcon
7,424
0,728
Memoria (MB)
Consultar e imprimir 10 registros (Tiempo Total) 500 peticiones/10 concurrentes
0,000
0,500
1,000
1,500
2,000
2,500
Doctrine 2 Phalcon
2,217
0,467
Tiempo/sg
Consultar e imprimir 10 registros (Memoria Petición) 500 peticiones/10 concurrentes
0,000
1,000
2,000
3,000
4,000
5,000
6,000
7,000
8,000
9,000
10,000
Doctrine 2 Phalcon
9,984
0,768
Memoria (MB)
Micro Framework: Peticiones atendidas por segundo
0
500
1000
1500
2000
2500
3000
Silex Slim Phalcon PHP
448
1134
2368 2551
# PeDciones/sg
¿Es posible desarrollar una aplicación solamente usando Phalcon?
• 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)
Áreas de Acción
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)
Componentes
• 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/ORM
• MySQL • PostgreSQL • SQLite
Phalcon/DB
Veamos un poco de código :]
Al estar escrito en C, ¿cómo encuentro fácilmente un error?
Implementaciones de PHP
96%
4%
Zend Engine
Hip Hop/Quercus/WebSmash/Phalanger
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