Adobe Flex
Resta dúvida ainda para que usar Flex?
28/05/09
Olá galera, tudo bem? Espero que sim. Bom vim à este post dizer que estava passeando pelo AIR Developer Center e logo de cara vi um grande exemplo chamado SalesBuilder feito em AIR e resolvi entrar. Bom visualizei o vídeo e fiquei impressionado com a riqueza de recursos, obviamente a cara de uma típica aplicação RIA.
Mas não foi só ela que me deixou impressionado e sim que logo abaixo tinha disponível o código fonte para download. Realmente é o melhor exemplo que já vi, e ainda com a possibilidade de explorar o código fonte e aprender novos recursos. Então acredito que vale a pena compartilhar para quem ainda não viu.
Segue abaixo o link desse belo exemplo:
SalesBuilder Adobe AIR sample aplication
Depois de ver o exemplo ainda resta uma dúvida. Porque usar Flex hein? Hehehe
Abraços pessoal e até a próxima!
Guia de estudos Adobe Flex (Recursos Online)
25/05/09
Olá pessoal, estou aqui para mais um post e hoje compartilharei uma dica para os novos amigos que estão iniciando no Adobe Flex e tem dificuldade de encontrar materiais para estudo.
Bom claro que a primeira dica e acredito que todos sabem é efetuar uma busca no Google, antes de tudo ele poderá te salvar, mas tem um porém, que as vezes a gente quer algo que siga uma sequencia de estudos sem se perder no conteúdo novo que estamos aprendendo. Para isso resolvi fazer um guia para meus estudos e claro estou compartilhando para vocês.
Antes de trabalhar com uma nova linguagem eu gosto de entender desde a história dela até seus recursos, objetivos, vantagens e desvantagens. Para isso a Adobe tem de sobra em seu site, então tomei como base dos meus estudos Flex em cima do site oficial da Adobe.
Segue abaixo o meu Guia de Estudos:
Saiba mais sobre o produto Adobe Flex:
http://www.adobe.com/br/products/flex/?promoid=BOZRZ
Visão Geral do Flex
http://www.adobe.com/br/products/flex/overview/
1 – Benefícios do Flex 3
http://www.adobe.com/br/products/flex/features/flex3/
2 – Estrutura do Flex
http://www.adobe.com/br/products/flex/features/flex_framework/
3 – Detalhes de Atualização Flex Builder 3
http://www.adobe.com/br/products/flex/upgrade/
4 – Recursos do Flex Builder 3
http://www.adobe.com/br/products/flex/features/flex_builder/
5 – Fluxo de trabalho do designer/desenvolvedor
http://www.adobe.com/br/products/flex/workflow/
6 – Saiba mais sobre BlazeDS
http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/
Saiba mais sobre RIAs e a Plataforma da Adobe.
Vantagens, Porque usar RIAs?, Relatórios de Analistas, etc.
http://www.adobe.com/br/resources/business/rich_internet_apps/
Guia de aprendizado (Flex Learning Paths)
http://www.adobe.com/devnet/flex/learn/
Suporte do Flex
Documentação, Tutoriais, Guias de aprendizados, Artigos e etc.
http://www.adobe.com/support/flex/
Centro de desenvolvimento do Flex
Exemplos, Artigos, Guias de aprendizados, documentação e etc.
http://www.adobe.com/devnet/flex/
Bom este é o guia que criei para meus estudos Flex, destaco bastante o Guia de aprendizado (Flex Learning Paths) que contém passo a passo como você pode aprender Flex e tem desde teoria à prática, realmente recomendo.
Claro eu tomei base o conteúdo oficial da Adobe, mas você pode simplesmente procurar por blogs e muitos sites de referencia para somar aos seus estudos.
Espero que gostem do conteúdo e também aceito sugestões, sintam-se a vontade em comentar.
Abraços até mais galera.
Flash Builder? Será mesmo?!
18/05/09
Iniciando mais uma semana de maio e me deparo com a seguinte notícia na lista FlexDev, “Novo nome do Flex Builder”, será?!
Pois é não vi nada oficial vindo da Adobe, mas dizem que a notícia vem sendo comentada pelos envagelistas da Adobe e que queiram ou não o nome Flex Builder vem trazendo confusão para algumas pessoas que acham que Flex é uma nova linguagem e não lembram que é um framework aonde desenvolvemos em ActionScript 3.0 e MXML, para outros mudar o nome para Flash Builder trará a mesma repercusão pois vão pensar que estaremos desenvolvendo animações berrantes em vez de criar RIAs.
Nem vou discutir muito agora, mas até então não passa de boatos e é bom estar de olho no futuro do Flex.
Deixarei para vocês a discussão nos blogs abaixo e na própria thread da lista do FlexDev:
Integrando Flex + Zend Framework (Usando o Quickstart da Zend) – PARTE 3
18/05/09
Olá pessoal, na Parte 2 tinha mostrado como criar o componente Zend AMF para comunicarmos com o Flex. Então vamos ao Flex e dar a continuidade a essa integração.
No seu Eclipse, selecione a perspectiva Flex Development e logo clique com o direito do mouse sobre o projeto PHP ZendFrameworkQuickstart. No menu selecione Flex Project Nature > Add Flex Project Nature, conforme a imagem abaixo.

No nosso projeto não será necessário selecionar a tecnologia, pois não iremos rodar o projeto diretamente do Eclipse e sim diretamente pelo browser, como pode ver a imagem abaixo.
Prosseguindo coloque o seu Output Folder a pasta public, aonde acessaremos diretamente nossa aplicação Flex.
Clicando em Finish será criado a pasta “src” dentro do projeto e abrirá o arquivo ZendFrameworkQuickstart.mxml. Caso ocorra algum erro no Eclipse de “Cannot create HMTL wrapper…” que não criou a pasta “html-template”, clicamos com o botão direito em cima da linha do erro e selecionamos a opção “Recreate HTML Templates”.

Na Application ZendFrameworkQuickstart criamos um simples botão e em seguida criaremos um RemoteObject no próprio MXML.
ZendFrameworkQuickstart.mxml
1 2 3 4 5 6 7 8 9 10 | <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:RemoteObject id="ro" destination="zend" endpoint="http://localhost/guestbook/gateway/amf" source="HelloFlexService" /> <mx:Button label="Chamar PHP" verticalCenter="0" horizontalCenter="0" /> </mx:Application> |
Veja o código acima, criei o RemoteObject passando o Endpoint com a url “http://localhost/guestbook/gateway/amf” que nada mais é a nossa action que configuramos o componente Zend AMF para se comunicar com o Flex, também foi adicionado a propriedade “source” com o nome da classe PHP que desejamos chamar, neste caso é a “HelloFlexService”.
Feito isso, vamos colocar uma ação de click no Botão e iremos chamar o método “helloFlex” que está na classe “HelloFlexService”.
ZendFrameworkQuickstart.mxml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Script> <![CDATA[ import mx.controls.Alert; public function chamarPhp():void{ //chama o método helloFlex ro.helloFlex(); } ]]> </mx:Script> <mx:RemoteObject id="ro" destination="zend" endpoint="http://localhost/guestbook/gateway/amf" source="HelloFlexService" result="Alert.show(event.result.toString())" /> <mx:Button label="Chamar PHP" click="chamarPhp()" verticalCenter="0" horizontalCenter="0" /> </mx:Application> |
Como pode ver criei um método chamarPhp que será chamado quando eu clicar no botão e dentro do método chamamos o RemoteObject de id “ro” e em seguida invocamos o método que está lá na classe HelloFlexService, chamado helloFlex.
Já aproveitei e adicionei um evento de result no RemoteObject, colocando um Alert para exibir o resultado vindo do método invocado. Salve a Application ZendFrameworkQuickstart e antes de acessar a url “http://localhost/guestbook/ZendFrameworkQuickstart.html” para rodar nossa aplicação Flex, vamos ao GatewayController e adicionaremos no método init() a linha de código “$this->_helper->layout()->disableLayout();”, veja abaixo como ficará o seu GatewayController:
GatewayController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php class GatewayController extends Zend_Controller_Action { public function init(){ //linha adicionada para evitar que o layout seja exibido $this->_helper->layout()->disableLayout(); //devemos adicionar isso para evitar a renderização da view $this->getHelper('viewRenderer')->setNoRender(); //carrega a classe Zend_Loader::loadClass('Zend_Amf_Server'); } public function amfAction(){ $server = new Zend_Amf_Server(); $server->addDirectory(APPLICATION_PATH . '/services/'); echo($server->handle()); } } |
Abrindo parenteses e explicando essa nova linha adicionada, ela evita que o layout HTML do nosso projeto Zend seja enviado para o arquivo AMF, atrapalhando nossa requisição entre Flex e PHP, pois ocorrerá um erro se tentar rodar sem desabilitar o layout do projeto. Poderá até fazer um teste rodando o nosso Endpoint “http://localhost/guestbook/gateway/amf” pelo browser e ver que o arquivo AMF terá dentro o layout HTML mais a string “Zend Amf Endpoint” e para que funcione corretamente a requisição AMF deve conter apenas a string “Zend Amf Endpoint”, fechando parenteses.
Agora sim rode a aplicação Flex pela URL “http://localhost/guestbook/ZendFrameworkQuickstart.html” e clique no botão Chamar PHP e verá como resultado o Alert exibindo o result do método helloFlex, que será a seguinte frase “Olá Flex, estou usando o Zend AMF!”.
Bom pessoal, o exemplo foi simples, mas pretendo fazer a parte 4 que mostrará como fazer a camada view do Quickstart em Flex. Abraços e até breve.
Integrando Flex + Zend Framework (Usando o Quickstart da Zend) – PARTE 2
16/05/09
Olá pessoal, estou de volta, não tive muito tempo esses últimos dias, mas prometo nos próximos dias honrar o meu sobrenome e ser fiel aos posts rsrs. Bom brincadeiras a parte, mas vamos o que interessa, que é continuar esta série de integrar o Flex com o Zend Framework usando um projeto já construído, neste caso estou usando o Quickstart da Zend.
Recomendo que você leia a parte 1 antes de continuar lendo este post.
Bom antes de dar continuidade e ir diretamente ao código, precisamos criar um novo projeto PHP no Eclipse, chamado ZendFrameworkQuickstart e apontar a pasta aonde está nosso Quickstart que baixamos anteriormente, no meu caso é “c:\wamp\apps\ZendFrameworkQuickstart”.

Criado o projeto, temos que configurar finalmente nosso componente Zend AMF. Para isso criamos um novo controller chamado “GatewayController” e logo em seguida seu método chamado “amfAction” veja abaixo:
GatewayController.php
1 2 3 4 5 6 7 8 | <?php class GatewayController extends Zend_Controller_Action { public function amfAction(){ } } |
Como podemos ver, o GatewayController é um controller comum como os outros, ele extende de Zend_Controller_Action e ele será o nosso Endpoint para comunicar com o Flex. Claro, ainda não acontecerá nada porque temos que instanciar nosso componente Zend AMF e faremos isso dentro da action “amf” que acabamos de criar. Para instanciar devemos primeiramente importar a classe Zend_Amf_Server e após instanciá-la. Aproveitando criei o método init() padrão do Zend Framework para importar a classe e também tirar a renderização do layout.
GatewayController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php class GatewayController extends Zend_Controller_Action { public function init(){ //remove a renderização do layout da página $this->getHelper('viewRenderer')->setNoRender(); //carrega a classe Zend_Loader::loadClass('Zend_Amf_Server'); } public function amfAction(){ //criamos a instancia do componente Zend AMF $server = new Zend_Amf_Server(); } } |
Agora deveremos indicar a pasta aonde ficará todas as nossas classes PHP que farão comunicação com o Flex, mas antes disso vamos criar esta pasta, eu sugiro criar dentro de application para padronizar a estrutura. Esta pasta poderá chamar-se “services”.
Criada a pasta voltamos ao GatewayController e usamos o método “addDirectory” do nosso componente Zend AMF e em seguida passamos o caminho completo da nossa pasta “services”. Veja:
GatewayController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php class GatewayController extends Zend_Controller_Action { public function init(){ //remove a renderização do layout da página $this->getHelper('viewRenderer')->setNoRender(); //carrega a classe Zend_Loader::loadClass('Zend_Amf_Server'); } public function amfAction(){ //criamos a instancia do componente Zend AMF $server = new Zend_Amf_Server(); $server->addDirectory(APPLICATION_PATH . '/services/'); } } |
Percebem-se que coloquei a constante APPLICATION_PATH para indicar o caminho completo até a pasta “application”, isso já está configurado no nosso index.php (Arquivo front-controller do Quickstart). Então o método “addDirectory” mapeia toda a pasta “services” indicando que ali estão todas as classes que terão acesso ao Flex e vice versa.
Precisamos agora fazer o Zend AMF conectar com o Flex através do método “handle”, para isso devemos imprimi-lo na tela para que aja a manipulação dos dados AMF.
GatewayController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php class GatewayController extends Zend_Controller_Action { public function init(){ //remove a renderização do layout da página $this->getHelper('viewRenderer')->setNoRender(); //carrega a classe Zend_Loader::loadClass('Zend_Amf_Server'); } public function amfAction(){ //criamos a instancia do componente Zend AMF $server = new Zend_Amf_Server(); $server->addDirectory(APPLICATION_PATH . '/services/'); echo($server->handle()); } } |
Pronto, agora você pode testar em seu navegador, a url “http://localhost/guestbook/gateway/amf” e deverá obter uma solicitação de download de um arquivo “amf” do tipo AMF. Se editá-lo verá que está escrito Zend Amf Endpoint. Isso significa que está funcionando até então nossa comunicação entre Zend e Flex.
Vamos criar a nossa classe PHP que desejamos comunicar com o Flex.
Crie um novo arquivo PHP dentro da pasta “services” chamado de “HelloFlexService” e respectivamente o mesmo nome para a classe. Em seguida criamos um método chamado “helloFlex” e colocamos um simples return “Olá Flex, estou usando o Zend AMF!”.
HelloPhpService.php
1 2 3 4 5 6 7 8 | <?php class HelloFlexService { public function helloFlex(){ return 'Olá Flex, estou usando o Zend AMF!'; } } |
Feito! No próximo post estarei mostrando para vocês como chamar esta classe no Flex e exibir o seu conteúdo. Desta vez eu não demoro rsrs, aguardem…
Integrando Flex + Zend Framework (Usando o Quickstart da Zend) – PARTE 1
29/04/09
Olá pessoal, estou aí para mais um post e agora postando um artigo interessante e que muitos ainda gostariam de saber como integrar uma aplicação Zend Framework com o Adobe Flex. Vou dividir este post em partes e de inicio vamos configurar o nosso Quickstart para que possam prosseguir na integração com nosso Flex.
Lembrando que não vou ensinar como configurar o ambiente Zend Framework, pois não é objetivo deste post.
Primeiramente vou citar o que você precisará para que tudo funcione perfeitamente:
1º – Baixe o Quickstart no site do Zend Framework:
http://framework.zend.com/docs/quickstart
2º – Descompacte o arquivo aonde desejar, de preferência em um local aonde você conheça o caminho do diretório completo.
3º – Caso ainda não tenha a library do Zend Framework, você pode baixar aqui:
http://framework.zend.com/download/latest
Pode baixar o pacote minimal, pois conterá somente o que precisamos.
4º – Basta você pegar a pasta library do Zend Framework que acabou de baixar e sobrescreva a que está em seu ZendFrameworkQuickstart.
5º – Então precisamos configurar a aplicação Quickstart para que funcione sem erros, para isso devemos configurar para que a pasta Public dentro de ZendFrameworkQuickstart seja o nosso diretório raiz do servidor. Para evitar que alteramos as configurações de nosso servidor, podemos criar um Alias, que agora mostrarei a maneira que eu fiz usando o Wamp, sendo que você pode fazer da maneira que preferir desde que funcione perfeitamente a aplicação Quickstart.
Se você usa o Wamp existe um diretório chamado “alias” e dentro dele possui 2 arquivos .conf que se refere aos alias do phpmyadmin e sqlite. Crie uma cópia de um dos arquivos .conf e crie o seu alias, apontando a pasta public do ZendFrameworkQuickstart. Em meu caso ficou desta maneira:
Arquivo guestbook.conf
Alias /guestbook "c:/wamp/apps/ZendFrameworkQuickstart/public/" # to give access to guestbook from outside # replace the lines # # Order Deny,Allow # Deny from all # Allow from 127.0.0.1 # # by # # Order Allow,Deny # Allow from all # Options Indexes FollowSymLinks MultiViews AllowOverride all Order Deny,Allow Deny from all Allow from 127.0.0.1
Após isso vá até seu arquivo .htaccess dentro da pasta Public de seu ZendFrameworkQuickStart e altere a última linha que contém “RewriteRule ^.*$ index.php [NC,L]” e troque por “RewriteRule ^.*$ /guestbook/index.php [NC,L]” adicionando na frente o seu alias, no meu caso “/guestbook/”.
Reinicie o seu servidor e após acesse a url http://localhost/guestbook
Se você está visualizando em seu navegador a seguinte frase “Welcome to the Zend Framework!”, parabéns você conseguiu fazer funcionar o QuickStart da Zend. Se não conseguiu, peço que reveja os passos acima ou comente este post dizendo o problema que ocorreu.
Bom pessoal, por enquanto é isso, em breve estarei postando a Parte 2, aonde mexeremos com o Zend_Amf.
Várias técnicas de melhores práticas e otimização em ActionScript 3.0 e Flex.
25/04/09
Bom a pedido de muitos para que eu lançasse logo meu primeiro post foram muitas e aqui está. Gostaria de agradecer meu colega Ricardo por me enviar um belo post do Sean Moore, publicado no InsideRIA, sobre o trabalho de otimizar e descobrir melhores práticas em ActionScript 3.0 e Flex, usando o Flex Profiler. Achei bastante interessante e resolvi brevemente divulgar essas técnicas e traduzi-lás.
Antes de mostrar as técnicas, gostaria de falar rapidamente sobre a perspectiva Flex Profiler (imagem a seguir) dentro do Flex Builder 3, usada pelo Moore, ajuda a você ter uma noção de uso de memória, consumo de cada propriedade, chamada de método e instanciação de objetos dentro de sua aplicação.
Bom pode ter certeza que estarei dedicando um post sobre o Flex Profiler, mas por enquanto vamos ao que interessa neste post, que são as técnicas de melhores práticas e otimização.
Seguem elas:
1. Evite usar o operador new quando for criar Arrays
var a = [];
Não use:
var a = new Array ();
2. Criar arrays consome muito recurso, portanto conserve-os.
var vanityCollection01: Array = new Array (); var vanityCollection02: Array = new Array (); var vanityCollection03: Array = new Array (); var vanityCollection04: Array = new Array ();
3. Maneira mais rápida de copiar um array:
var copy : Array = sourceArray.concat();
4. Setar valores em arrays é lento:
empregados.push(trabalhador); empregados[2] = trabalhador;
5. Resgatar valores de Arrays é duas vezes mais rápido do que setá-los:
var trabalhador:Trabalhador = empregados[2];
6. Use métodos estáticos quando esses não precisam de uma instancia de objeto:
StringUtils.trim("Texto com espaço no final ");
Definição da classe:
package
{
public final class StringUtils
{
public static function trim( s : String ) : String
{
var trimmed : String;
// implementação...
return trimmed;
}
}
}
7. Use const para propriedades (constantes), caso seu valor nunca irá mudar durante todo o ciclo de sua aplicação:
public const APPLICATION_PUBLISHER : String = "Company, Inc.";
8. Use final quando a classe não pode conter herança, ou seja, não pode extende-la com outra classe.
public final class StringUtils
9. Nomes longos para métodos/variáveis não impacta na performance em ActionScript 3.0 (mas sim em outras linguagens).
algunsNomesLongosLoucosDeMetodoNaoFazRealmenteUmImpactoGrandeNaPerformance();
10. Uma linha atribuída NÃO compra nenhuma performance (mas sim em outras linguagens).
var i=0; j=10; k=200;
11. Não há diferença de uso de memória entre o uso de If ou Switch:
if ( condition )
{
// manipula condição
}
IDENTICO USO DE MEMÓRIA:
switch ( condition )
{
case "A":
// logica para manipular caso A
break;
case "B":
// logica para manipular caso B
break;
}
12. Use em suas condições If, uma ordenação a qual costuma ser mais verdadeira do que as outras:
if ( conditionThatHappensAlot )
{
// logica para manipular condição que é encontrada frequentemente
}
else if ( conditionThatHappensSomtimes )
{
// manipula caso essa é encontrada ocasionalmente
}
else
{
// manipula caso essa não é muito necessária
}
13. AVM (ActionScript Virtual Machine) converte int para Number durante calculos dentro de loops (VM foi alterada, da versão 9 para 10, assim conversões de int, uint e Number não são mais lentas como costumavam ser).
14. Resolver problemas de conversão e de tipos de objetos incorretos.
15. Use uint moderadamente, ele pode ser lento (VM foi modificada, da versão 9 para 10, assim conversões de int, uint e Number não são mais lentas como costumavam ser).
var footerHex : uint = 0x00ccff;
16. Use inteiros para interações:
for (var i: int = 0; i < n; i++) Não use: for (var i: Number = 0; i < n; i++)
17. Não use inteiro com decimal:
var decimal : Number = 14.654;
Não use:
var decimal : int = 14.654;
18. Multiplicação x Divisão: em vez de usar 5000/1000 use: 5000*0.001
19. Em loops como for ou while, procure deixar expressões fora dos mesmos, para evitar que elas se repitam:
//errado
for (..){ a * 180 / Math.PI; }
//declare fora do loop:
toRadians = a*180/Math.PI;
20. Evite calcular e usar chamadas de métodos em loops:
var len : int = myArray.lengh;
for (var i=0; i < int; i++) { }
Não use:
for (var i=0; i < myArray.lengh;i++){ }
21. Use RegEx para validação e métodos de busca de strings:
// validação de codigo postal usando expressão regular
private var regEx:RegExp = /^[A-Z][0-9][A-Z] [0-9][A-Z][0-9]$/i;
private function validatePostal( event : Event ) : void
{
if( regEx.test( zipTextInput.text ) )
{
// manipula caso o campo é inválido
}
}
// busca uma palavra usando métodos String
var string : String = "Search me";
var searchIndex : int = string.indexOf( "me" );
var search : String = string.substring( searchIndex, searchIndex + 2 );
22. Reutilize objetos para manter uma memória estável, DisplayObjects e objeto URLLoader.
23. Seguinte modelo de componente Flex:
createChildren(); commitProperties(); updateDisplayList();
24. Somente use DataGrids em último resurso (certifique-se se você pode montar uma List primeiro).
25. Evite Repeaters para rolagem de dados.
26. Evite o método setStyle() (Um dos métodos que mais consome recurso do framework Flex).
27. Usar muitos componentes, reduz drasticamente o desempenho de sua aplicação:
<mx:Panel>
<mx:VBox>
<mx:HBox>
<mx:Label text="Label 1" />
<mx:VBox>
<mx:Label text="Label 2" />
</mx:VBox>
<mx:HBox>
<mx:Label text="Label 3" />
<mx:VBox>
<mx:Label text="Label 4" />
</mx:VBox>
</mx:HBox>
</mx:HBox>
</mx:VBox>
</mx:Panel>
28. Você pode fechar a tag de um componente simplesmente usando “/>”.
<mx:Image xmlns:mx="http://www.adobe.com/2006/mxml"
source="avatar.jpg" width="200" height="200" />
29. Remova os componentes desnecessários para reduzir o aninhamento dos mesmos.
30. Evite: O componente VBox dentro de um Panel, sendo que ele possui a propriedade layout como vertical, horizontal ou absoluto, evitando assim uma redundancia.
<!-- Correto -->
<mx:Panel>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:Panel>
<!-- Não Use -->
<mx:Panel>
<mx:VBox>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:VBox>
</mx:Panel>
31. Evite: O componente VBox dentro de um Application, sendo que ela possui a propriedade layout como vertical, horizontal ou absoluto, evitando assim uma redundancia.
<!-- Correto -->
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:Application>
<!-- Não Use -->
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml>
<mx:VBox>
<mx:Label text="Label 1" />
<mx:Label text="Label 2" />
</mx:VBox>
</mx:Application>
32. Setar a propriedade recycleChildren como true para melhorar a performance de objetos Repeaters.
(A reutilização usada, criou filhos ao em vez de criar novos objetos).
<mx:Script>
<![CDATA[
[Bindable]
public var repeaterData : Array = ["data 1", "data 2"];
]]>
</mx:Script>
<mx:Repeater id="repeater" dataProvider="{repeaterData}">
<mx:Label text="data item: {repeater.currentItem}"/>
</mx:Repeater>
33. Trave seu framerate em 60fps ou menor:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx=http://www.adobe.com/2006/mxml
frameRate="45">
</mx:Application>
34. Evite mostrar multiplas manipulações por frame.
35. Use o evento ENTER_FRAME ao em vez do evento Timer:
public function onEnterFrame( event : Event ) : void
{
}
private function init() : void
{
addEventListener( Event.ENTER_FRAME, onEnterFrame );
}
Não use:
public function onTimerTick( event : Event ) : void
{
}
private function init() : void
{
var timer : Timer = new Timer();
timer.start();
timer.addEventListener( TimerEvent.TIMER, onTimerTick );
}
36. Para adiar a criação de um objeto para vários frames use:
<mx:Container creationPolicy="queued"/>
37. Alpha = 0 não é o mesmo que visible = false (Objetos marcados como invisivel são ignorados).
loginButton.visible = false;
Não use:
loginButton.alpha = 0;
Outras Referencias citadas por Sean:
Sean Christmann: Optimizing Adobe AIR for Code Execution, Memory, and Rendering
http://www.craftymind.com/2008/11/20/max-2008-session-material/
Dennis Ippel: Some ActionScript 3.0 Optimizations
http://www.rozengain.com/blog/2007/05/01/some-actionscript-30-optimizations/
Shane McCartney: Tips on how to write efficient AS3
http://www.lostinactionscript.com/blog/index.php/2008/09/28/tips-on-how-to-write-efficient-as3/
Flex Application Performance: Tips and Techniques for Improving Client Application Performance
http://www.adobe.com/devnet/flex/articles/client_perf.html
Stephen Calender: ActionScript 3.0 Benchmarking
http://www.stephencalenderblog.com/?p=7
Grant Skinner: Types in AS3: ints not so fast, uints slow!
http://www.gskinner.com/blog/archives/2006/06/types_in_as3_in.html
Grant Skinner: Resource management strategies in Flash Player 9
http://www.adobe.com/devnet/flashplayer/articles/resource_management.html
Gary Grossman: ActionScript 3.0 and AVM2 Performance Tuning
http://www.onflex.org/ACDS/AS3TuningInsideAVM2JIT.pdf
Fastest way to copy an array
http://agit8.turbulent.ca/bwp/2008/08/04/flash-as3-optimization-fastest-way-to-copy-an-array/
Andre Michelle: AS3 optimations & suggestions
http://blog.andre-michelle.com/2005/as3-optimations-suggestions/
Package-level function closures in ActionScript
http://www.ericfeminella.com/blog/2008/05/06/package-level-function-closures-in-actionscript/
ActionScript 3 optimization techniques
http://blog.joa-ebert.com/2008/04/26/actionscript-3-optimization-techniques/
AS3 Performance Tester
http://businessintelligence.me/projects/performance_tester/performanceTester.html


