segunda-feira, 10 de dezembro de 2012

Dica: Flex + Php Como NÃO usar !!

Olá negada! 

Recentemente coisa de 1 ano atrás algo me dizia que os mais de 100 requires em uma app estavam consumindo muito recurso na comunicação de Flex+Php e com o ZendAmf. Inicialmente o gateway php estava da seguinte forma:


require_once 'Zend/Amf/Server.php';
require_once 'dir/minhaClasse1.php';
require_once 'dir/minhaClasse2.php';
...
require_once 'dir/minhaClasse300.php';


$server = new Zend_Amf_Server ( );
$server->setClass ("Mapeamento das Classes" );
$server->setProduction ( false );
echo $server->handle ();

Esses inúmeros require_once incluindo todas essas classes, mostra-se totalmente desnecessário, pois além de consumir muito recurso deixando a comunicação entre o flex e o php terrivelmente lenta (Quer piorar as coisas? imagina umas 100 pessoas <tentando acessando esse mesmo arquivo!), para que diabos eu vou carregar meu sistema inteiro, se meu RO (remote object) so vai precisar de um determinado metodo por vez, e xau pro lôro!?  Solução Goooooooooooogle!

Como algum héroi que desenvolveu o Zend ja tinha PENSADO nessa possibilidade! Não tem logica nenhuma fazer a gambiarra codificação da forma descrita acima. Então bastou implementar no gateway o autoLoader para carregar automaticamente as classes do diretório que serão utilizadas pelo Flex (Remote Object), ficando assim:

require_once 'Zend/Loader/AutoLoader.php';
require_once 'Zend/Amf/Server.php';
Zend_Loader_Autoloader::getInstance ()->setFallbackAutoloader ( true );

$server = new Zend_Amf_Server ( );
$server->setProduction ( false );
// setando o diretorio das classes(carregadas automáticamente) usadas pelo Flex (remote object)
$server->addDirectory ( dirname ( __FILE__ ) . "/dir" );

echo $server->handle ();

Essa forma de carregar os arquivos automaticamente, deixa a comunicação muito mais rápida, pois não preciso levantar todo o sistema para acessar um simples método de login por exemplo!