Framework YAF PHP

Artigo que apresenta o framework YAF, para PHP, que possui altíssima performance para aplicações Web.

Introdução

YAF-PHP (Yet Another Framework) é um framework para desenvolvimento de aplicações Web em PHP, criado em 2011 pelo "Laruence" (um dos membros da equipe de desenvolvimento da linguagem PHP). Porém, ele possui um grande diferencial em relação aos milhares de frameworks disponíveis para PHP: ele é disponibilizado na forma de extensão do PHP. Neste artigo vamos conhecer um pouco deste framework, apontando suas vantagens e desvantagens.


Características do YAF-PHP

Performance

A principal característica do YAF-PHP é a forma como ele foi construído. Ao invés de ser um framework feito em PHP para ser usado por aplicações PHP (como a maioria dos frameworks PHP vistos por aí), ele é uma extensão do PHP, escrito em linguagem C com a engine do PHP e disponibilizado via Pecl. Se você não sabe o que é Pecl, recomendo a leitura do artigo Instalação de Módulos Pear e Pecl. Para instalção, acesse o Pacote YAF no Pecl.

Por ser escrito em linguagem C, o YAF possui uma performance absurdamente melhor que o convencional. Afinal, ao chegar uma requisição HTTP para sua aplicação, o PHP não vai precisar fazer o parse de vários arquivos PHP do framework e da aplicação para depois executá-los. Apenas vai fazer o parse dos arquivos da aplicação. As classes disponibilizadas pelo framework ficam em memória, prontas para uso. O autor do framework postou alguns benchmarks comparando o YAF com outros frameworks famosos. Dê uma olhada no Benchmark do YAF-PHP.

Algo que chama muita a atenção é o quanto o Zend Framework é pesado e tem performance ruim para um simples "hello world", mesmo utilizando recursos para otimização, como o APC, que, por sinal, também é desenvolvido pelo autor do YAF. Acredito que, por partir de uma performance tão ruim, ela tende a não cair tanto conforme aumenta-se a complexidade da aplicação. Por outro lado, a performance de uma aplicação com YAF pode cair muito conforme aumenta-se a complexidade da aplicação, afinal, serão mais classes PHP para serem parseadas e executadas.


Organização

Quanto à organização, o YAF-PHP dá suporte à utilização do padrão MVC, e à criação de módulos. A estrutura de diretórios convencional é a seguinte:

.
|-- htdocs
|   `-- index.php
|-- conf
|   `-- application.ini
|-- library
`-- application
    |-- Bootstrap.php
    |-- models
    |-- controllers
    |   `-- Index.php
    |-- views
    |   `-- index
    |       `-- index.phtml
    |-- modules
    |-- library
    `-- plugins

Em htdocs, são colocados o arquivo index.php, que e responsável por receber todas as requisições (front-controller), e os arquivos estáticos da aplicação (normalmente arquivos css, js, imagens, etc). É necessário configurar o servidor HTTP para redirecionar todas as requisições de arquivos inexistentes para ser processado pelo index.php. No Apache, por exemplo, isso pode ser configurado nas configurações do Virtual Host ou num arquivo de configurações local (.htaccess).

Em conf, ficam os arquivos de configuração. O principal arquivo de configurações é montado no formato INI, e é requerido pelo index.php para inicializar a aplicação.

Em library, podemos colocar bibliotecas externas, mas usadas pela aplicação. Desta forma, elas não precisam seguir as diretrizes e padrões do YAF.

Em application, ficam:

  • o arquivo Bootstrap.php, com as instruções para inicializar a aplicação;
  • o diretorio de modelos globais da aplicação;
  • o diretório de controllers globais da aplicação;
  • o diretório de views (templates), que segue a mesma estrutura das actions dos controllers;
  • o diretório (opcional) de módulos, onde podem ser colocados controllers, views e models encapsulados;
  • o diretório (opcional) de bibliotecas usadas pela aplicação;
  • o diretório (opcional) de plugins a serem acoplados aos controllers.

A estrutura de diretórios pode ter seus nomes alterados, embora eu acredite que é possível perder um pouco de performance alterando alguns dos padrões do framework.

Quanto à nomenclatura, o YAF-PHP oferece o conjunto de classes com nomes usando Namespaces ou nomes separados pelo símbolo "_", podendo ser configurado via diretiva de configuração do php.ini. Além disso, o framework possui um autoloader próprio, muito rápido, e que também pode usar ou não o recurso de Namespaces. O autoloader pode funcionar analisando-se o sufixo da classe carregada ou usando apenas o prefixo.


View

A view é bastante simples e baseada em templates escritos em arquivos phtml, que são essencialmente arquivos HTML com pequenos trechos de código PHP para geração do conteúdo dinâmico. Ela possui flexibilidade suficiente para se acoplar recursos mais sofisticados, como o padrão Layout-View, onde se aproveita uma mesma "estrutura global de layout" para várias views diferentes.

O framework não oferece nenhum Helper para auxiliar a criação de conteúdo HTML. Embora você possa criar os seus próprios Helpers.


Controllers

A construção dos controllers é simples. É possível implementar as actions dentro das próprias classes controller, através de métodos com o sufixo "Action", ou através de classes exclusivas para cada action, que são "indexadas" nas classes controller. Actions em classes próprias é um recurso interessante, pois ao executar uma action, não é necessário carregar as outras que não foram usadas.

Outro recurso bacana é que você pode criar os métodos das action com parâmetros nomeados. Assim, ao receber algum parâmetro via HTTP/GET com o mesmo nome da variável usada como parâmetro do método, o parâmetro é automaticamente preenchido com o valor recebido.

Além disso, a classe base para montar controllers possui os métodos básicos para encaminhar a requisição para outra action, ou para redirecionar a requisição para outra página.


Recursos

O YAF-PHP é um framework bastante enxuto. Possui pouquíssimos recursos, mas oferece o conjunto de classes essencial para se montar uma estrutura em MVC, e alguns recursos relacionados, tais como:

  • Yaf_Loader: classe responsável por encontrar as classes/interfaces/traits a serem carregadas sob demanda (autoload).
  • Yaf_Application: classe responsável por inicializar um bootstrap, carregar as configurações e executar o dispatcher.
  • Yaf_Dispatcher: classe responsável por receber a requisição, avaliar a rota de busca do controller/action e, finalmente, acioná-los.
  • Yaf_Registry: classe que permite armazenar valores para acesso global (em qualquer parte da aplicação).
  • Yaf_Session: classe que permite controlar a sessão ($_SESSION) através de uma interface orientada a objetos.
  • Yaf_Request_Http: classe que permite avaliar a requisição do usuário por uma interface orientada a objetos (obter dados enviados via GET, POST, COOKIE; checar se a requisição veio via requisição assíncrona).

Além disso, possui algumas classes abstratas, próprias para criação dos elementos necessários para aplicação, como controller, action, router, plugin, bootstrap, config, request e response.


Documentação

A documentação oficial do YAF-PHP está no próprio site do php.net: Documentação do YAF-PHP.

Embora apresente alguns exemplos, nem todas as classes estão bem documentadas, gerando certo desconforto no aprendizado do mesmo.


Conclusão

O YAF-PHP é um framework simples e muito rápido. Ele não é útil para quem procura um framework que possui tudo, pois ele possui apenas os recursos essenciais. Por outro lado, o programador tem a liberdade de acoplar ou desenvolver os recursos extras que necessita. Além disso, o aprendizado se torna relativamente mais rápido, já que são poucas classes para se estudar.

Este framework é bastante difundido na China e localidades de língua chinesa, mas ainda é pouco conhecido nas demais localidades. O principal fórum de discussão (www.yafphp.com) é chinês. Ele é utilizado em alguns projetos com grande volume de tráfego, como alguns produtos do Baidu (importante buscador do oriente) e Sina.

Algo importante de se destacar é que, por ser disponibilizado na forma de extensão do PHP, sua instalação requer permissão para manusear o servidor. Ou seja, não é tão simples quanto um framework escrito em PHP, que é só colocar num diretório e usá-lo.

Observação: também existe um framework para PHP disponibilizado como extensão do PHP, que é o Phalcon. Ele está próximo de chegar à versão 1.0, mas possui mais recursos que o YAF-PHP. É um projeto que estou de olho, mas ainda é muito jovem e, até onde notei, não foi utilizado por muitas aplicações.

3 comentários