Performance de verdade com
Phalcon Framework
Jaime da Costa Pereira Neto
http://jaimeneto.com
contato@jaimeneto.com
github.com/jaimeneto
Jaime Neto
➔ Graduado em Telemática pelo CEFET-PB (atual IFPB)
➔ Especialista em Desenvolvimento para Web pela UNIBRATEC (atual Estácio iDez)
➔ Zend Certified Engineer - Zend Framework
➔ Trabalha como Analista de Sistemas no Instituto Chico Mendes de Conservação da
Biodiversidade (ICMBio)
➔ Membro do PHP-PB desde os primórdios
Você conhece o Phalcon?
➔Full stack Framework PHP
➔Lançado em 2012
➔Versão atual: 3.1.1
➔Traduzido para 38 idiomas (inclusive Português)
➔Open source (BSD License)
➔Baixo acoplamento
Informações
Mas o que ele oferece?
Recursos
➔MVC e HMVC
➔Dependency Injection
➔Rest
➔Autoloader
➔Router
➔ORM
➔Cache
➔Template Engine
➔i18n
➔Forms
➔Flash Messages
➔ACL
➔Sharding
➔Crypt
E qual é o verdadeiro diferencial?
➔Funciona como uma extensão de servidor web, escrita em linguagem C
◆ Velocidade de execução maior (não precisa processar os arquivos PHP do framework)
◆ Consegue lidar com mais solicitações HTTP por segundo
◆ Quantidade menor de arquivos
Performance
E as desvantagens?
➔Funciona como uma extensão de servidor web, escrita em linguagem C
◆ Dificulta a depuração do código
◆ Pode haver uma curva de aprendizado maior
◆ Caso algo dê errado, você poderá ter que depurar código em C
◆ Pode haver dificuldades para atualização de versão no servidor
Desvantagens
Ele faz isso tudo sozinho?
➔A partir da versão 2.0 o Phalcon passou a utilizar o Zephir
◆ Linguagem de alto nível projetada para facilitar a criação e manutenção de extensões para PHP
◆ Open source (MIT license)
◆ Desenvolvimento com linguagens compiladas perdem na produtividade, mas ganham na
performance. A idéia do Zephir é ter o melhor dos dois mundos.
◆ https://zephir-lang.com
E só existe uma forma de usar?
➔Ferramenta RAD (Rapid Application Development)
◆ Permite criar rapidamente o esqueleto da aplicação
◆ Permite gerar partes da aplicação de acordo com a necessidade (module, controller, model)
◆ Gera CRUD completo baseado nas tabelas do Banco de Dados
◆ Funciona como script de linha de comando
◆ Oferece uma opção visual para ser usada via browser
Devtools
phalcon create-project blog simple --enable-webtools
phalcon scaffold --table-name posts
phalcon create-controller --name users
phalcon create-model --name users
Devtools
➔Usando a linha de comando (Exemplo)
◆ Criar projeto blog com estrutura simples e ativar webtools
◆ Criar toda estrutura CRUD da tabela posts (controller, model, telas de busca, cadastro, alteração,
exclusão, lista)
◆ Criar controller e model de users
Webtools
➔ 17 sugestões de estrutura
➔ https://github.com/phalcon/mvc
simple
├── apps
│ ├── controllers
│ │ ├── IndexController.php
│ │ └── ProductsController.php
│ ├── models
│ │ └── Products.php
│ └── views
│ └── products
│ └── index.phtml
└── public
└── index.php
MVC
multiple
├── apps
│ ├── backend
│ │ ├── Module.php
│ │ ├── controllers
│ │ │ ├── IndexController.php
│ │ │ ├── LoginController.php
│ │ │ └── ProductsController.php
│ │ ├── models
│ │ │ └── Products.php
│ │ └── views
│ │ ├── login
│ │ │ └── index.phtml
│ │ └── products
│ │ └── index.phtml
│ └── frontend
│ ├── Module.php
│ ├── controllers
│ │ ├── IndexController.php
│ │ ├── ProductsController.php
│ │ └── UsersController.php
│ ├── models
│ │ └── Products.php
│ └── views
│ ├── index
│ │ └── index.phtml
│ └── products
│ └── index.phtml
└── public
└── index.php
multiple-shared-views
├── apps
│ ├── common
│ │ └── views
│ │ ├── index
│ │ │ └── index.phtml
│ │ ├── index.phtml
│ │ └── products
│ │ └── index.phtml
│ └── modules
│ ├── backend
│ │ ├── Module.php
│ │ ├── controllers
│ │ │ ├── IndexController.php
│ │ │ └──
ProductsController.php
│ │ └── models
│ │ └── Products.php
│ └── frontend
│ ├── Module.php
│ └── controllers
│ └── IndexController.php
└── public
└── index.php
➔ Phalcon pode funcionar também como um micro-framework
➔Opção mais adequada para implementar pequenas aplicações, APIs e protótipos
➔O site do phalcon foi feito como micro app: https://github.com/phalcon/website
➔Micro app gerado com Devtools:
micro
├── config
│ └── config.php
├── index.html
├── public
│ └── index.php
└── views
├── 404.phtml
└── index.phtml
Micro
➔Mecanismo de Templates
◆ Escrito em Zephic/C para PHP
◆ Oferece helpers para facilitar no
desenvolvimento das views
◆ Integrado com outros componentes
do Phalcon
◆ Pode ser usado separadamente do Phalcon
◆ O phalcon gera cache dos templates para ganho de performance
Volt
{# app/views/products/show.volt #}
{% block last_products %}
{% for product in products %}
* Name: {{ product.name|e }}
{% if product.status == 'Active' %}
Price: {{ product.price + product.taxes/100}}
{% endif %}
{% endfor %}
{% endblock %}
Onde isso nos leva?
➔Consulta única ao banco de dados Fonte: www.techempower.com/benchmarks (16/11/2016)
Benchmark
➔Múltiplas consultas ao banco de dados Fonte: www.techempower.com/benchmarks (16/11/2016)
Benchmark
➔Site Oficial: https://phalconphp.com/pt/
➔Blog Oficial: https://blog.phalconphp.com
➔Github Oficial: https://github.com/phalcon
➔Listas de sites feitos em phalcon:
◆ https://github.com/phalcon/cphalcon/wiki/Powered-by-Phalcon
◆ https://builtwith.phalconphp.com
➔Sua Escolha (Projeto do PHP-PB)
◆ https://github.com/php-pb/Sua-escolha
Links
➔Projeto Phalcon Brasil
◆ http://phalconbrasil.com.br
◆ Apoio:
https://www.soloweb.com.br
Convite
Dúvidas?
<?php
$contato = [
‘nome’ => ‘Jaime Neto’,
‘email’ => ‘contato@jaimeneto.com’,
‘blog’ => ‘http://jaimeneto.com’,
‘twitter’ => ‘@jaimecpn’
];
var_dump($contato);
?>
Muito obrigado!

Performance de verdade com Phalcon Framework

  • 1.
    Performance de verdadecom Phalcon Framework Jaime da Costa Pereira Neto http://jaimeneto.com contato@jaimeneto.com github.com/jaimeneto
  • 2.
    Jaime Neto ➔ Graduadoem Telemática pelo CEFET-PB (atual IFPB) ➔ Especialista em Desenvolvimento para Web pela UNIBRATEC (atual Estácio iDez) ➔ Zend Certified Engineer - Zend Framework ➔ Trabalha como Analista de Sistemas no Instituto Chico Mendes de Conservação da Biodiversidade (ICMBio) ➔ Membro do PHP-PB desde os primórdios
  • 3.
  • 4.
    ➔Full stack FrameworkPHP ➔Lançado em 2012 ➔Versão atual: 3.1.1 ➔Traduzido para 38 idiomas (inclusive Português) ➔Open source (BSD License) ➔Baixo acoplamento Informações
  • 5.
    Mas o queele oferece?
  • 6.
    Recursos ➔MVC e HMVC ➔DependencyInjection ➔Rest ➔Autoloader ➔Router ➔ORM ➔Cache ➔Template Engine ➔i18n ➔Forms ➔Flash Messages ➔ACL ➔Sharding ➔Crypt
  • 7.
    E qual éo verdadeiro diferencial?
  • 8.
    ➔Funciona como umaextensão de servidor web, escrita em linguagem C ◆ Velocidade de execução maior (não precisa processar os arquivos PHP do framework) ◆ Consegue lidar com mais solicitações HTTP por segundo ◆ Quantidade menor de arquivos Performance
  • 9.
  • 10.
    ➔Funciona como umaextensão de servidor web, escrita em linguagem C ◆ Dificulta a depuração do código ◆ Pode haver uma curva de aprendizado maior ◆ Caso algo dê errado, você poderá ter que depurar código em C ◆ Pode haver dificuldades para atualização de versão no servidor Desvantagens
  • 11.
    Ele faz issotudo sozinho?
  • 12.
    ➔A partir daversão 2.0 o Phalcon passou a utilizar o Zephir ◆ Linguagem de alto nível projetada para facilitar a criação e manutenção de extensões para PHP ◆ Open source (MIT license) ◆ Desenvolvimento com linguagens compiladas perdem na produtividade, mas ganham na performance. A idéia do Zephir é ter o melhor dos dois mundos. ◆ https://zephir-lang.com
  • 13.
    E só existeuma forma de usar?
  • 14.
    ➔Ferramenta RAD (RapidApplication Development) ◆ Permite criar rapidamente o esqueleto da aplicação ◆ Permite gerar partes da aplicação de acordo com a necessidade (module, controller, model) ◆ Gera CRUD completo baseado nas tabelas do Banco de Dados ◆ Funciona como script de linha de comando ◆ Oferece uma opção visual para ser usada via browser Devtools
  • 15.
    phalcon create-project blogsimple --enable-webtools phalcon scaffold --table-name posts phalcon create-controller --name users phalcon create-model --name users Devtools ➔Usando a linha de comando (Exemplo) ◆ Criar projeto blog com estrutura simples e ativar webtools ◆ Criar toda estrutura CRUD da tabela posts (controller, model, telas de busca, cadastro, alteração, exclusão, lista) ◆ Criar controller e model de users
  • 16.
  • 17.
    ➔ 17 sugestõesde estrutura ➔ https://github.com/phalcon/mvc simple ├── apps │ ├── controllers │ │ ├── IndexController.php │ │ └── ProductsController.php │ ├── models │ │ └── Products.php │ └── views │ └── products │ └── index.phtml └── public └── index.php MVC multiple ├── apps │ ├── backend │ │ ├── Module.php │ │ ├── controllers │ │ │ ├── IndexController.php │ │ │ ├── LoginController.php │ │ │ └── ProductsController.php │ │ ├── models │ │ │ └── Products.php │ │ └── views │ │ ├── login │ │ │ └── index.phtml │ │ └── products │ │ └── index.phtml │ └── frontend │ ├── Module.php │ ├── controllers │ │ ├── IndexController.php │ │ ├── ProductsController.php │ │ └── UsersController.php │ ├── models │ │ └── Products.php │ └── views │ ├── index │ │ └── index.phtml │ └── products │ └── index.phtml └── public └── index.php multiple-shared-views ├── apps │ ├── common │ │ └── views │ │ ├── index │ │ │ └── index.phtml │ │ ├── index.phtml │ │ └── products │ │ └── index.phtml │ └── modules │ ├── backend │ │ ├── Module.php │ │ ├── controllers │ │ │ ├── IndexController.php │ │ │ └── ProductsController.php │ │ └── models │ │ └── Products.php │ └── frontend │ ├── Module.php │ └── controllers │ └── IndexController.php └── public └── index.php
  • 18.
    ➔ Phalcon podefuncionar também como um micro-framework ➔Opção mais adequada para implementar pequenas aplicações, APIs e protótipos ➔O site do phalcon foi feito como micro app: https://github.com/phalcon/website ➔Micro app gerado com Devtools: micro ├── config │ └── config.php ├── index.html ├── public │ └── index.php └── views ├── 404.phtml └── index.phtml Micro
  • 19.
    ➔Mecanismo de Templates ◆Escrito em Zephic/C para PHP ◆ Oferece helpers para facilitar no desenvolvimento das views ◆ Integrado com outros componentes do Phalcon ◆ Pode ser usado separadamente do Phalcon ◆ O phalcon gera cache dos templates para ganho de performance Volt {# app/views/products/show.volt #} {% block last_products %} {% for product in products %} * Name: {{ product.name|e }} {% if product.status == 'Active' %} Price: {{ product.price + product.taxes/100}} {% endif %} {% endfor %} {% endblock %}
  • 20.
  • 21.
    ➔Consulta única aobanco de dados Fonte: www.techempower.com/benchmarks (16/11/2016) Benchmark
  • 22.
    ➔Múltiplas consultas aobanco de dados Fonte: www.techempower.com/benchmarks (16/11/2016) Benchmark
  • 23.
    ➔Site Oficial: https://phalconphp.com/pt/ ➔BlogOficial: https://blog.phalconphp.com ➔Github Oficial: https://github.com/phalcon ➔Listas de sites feitos em phalcon: ◆ https://github.com/phalcon/cphalcon/wiki/Powered-by-Phalcon ◆ https://builtwith.phalconphp.com ➔Sua Escolha (Projeto do PHP-PB) ◆ https://github.com/php-pb/Sua-escolha Links
  • 24.
    ➔Projeto Phalcon Brasil ◆http://phalconbrasil.com.br ◆ Apoio: https://www.soloweb.com.br Convite
  • 25.
    Dúvidas? <?php $contato = [ ‘nome’=> ‘Jaime Neto’, ‘email’ => ‘contato@jaimeneto.com’, ‘blog’ => ‘http://jaimeneto.com’, ‘twitter’ => ‘@jaimecpn’ ]; var_dump($contato); ?>
  • 26.