Adobe CS3.0/ AS 3.0/ Dicas e truques/ Flash CS 3

#1 – Planejando uma aplicação RIA de sucesso, cuidados que deve-se tomar.

De ontem para hoje eu me deparei em um projeto interno que está sendo desenvolvimento onde o principal objetivo é otimizar a aplicação Flex. E um dos laços que faz isso melhorar a aplicação, são loops, tamanho de swf, hardware envolvido, etc. Os loops sejam eles for, for each, while, do while, for in, timer. E por incrível que possa parecer, os resultados podem não deixar muita gente contente, mais é uma pura verdade quando você faz uma aplicção para ser usada em quaisquer circunstâncias, sejam elas ótimas ou muito más, de todo jeito tem que ser testada e funcionar.

Qual equepamento foi usado?

Geralmente quando faço um aplicativo eu procuro testar em qualquer hardware que vocês imaginar, sejam máquenas excelentes e tops de linhas até maquinas com 8 anos de vida como um K6 da AMD, lembram?

O equepamento foram 2, seguem abaixo:

AMD K6 com 256mb de memóri processador de 550Mhz, placa de video de 32bits e resolução máxima de 1024×768, com sistema Operacional Windows 2000.

Intel core 2 duo com 4Giga de memória, placa de video 32bits resolução de 1280×800 com sistema operacional Vista Home Premium.

Primeiro problema: Compatibilidade

Flash Player 9 não é compatível com Windows 2000, a versão do último build a 0.75 não pode ser instalada. já a versão 9.045 roda tranqüilamente. Problema resolvido, vamos ao segundo teste.

Segundo Teste: Performance de Frames Rates

No AMD K6-II com uma taxa de 24fps em uma aplicação Flex o consumo da memória chega a picos entre 17mb e 23mb, consideravelmente alto, já que essa versão do build tem esse bug, então a pergunta do tal “você quer interromper esse script ou continuar” aparece sempre. Então diminuímos para 16fps e problema resolvido o aplicativo começa a executar tranqüilamente perfeito.

No Intel core 2 Duo com o FPS em 24 o aplicativo chega a consumir entre picos de 3mb até 4mb de memória, com o FPS, chega aumentar cerca de 40% ‘a mais o uso de memória.

Resultados
Em todas as vias use o padrão de 40fps caso sua aplicação for usada nessas poderosas máquenas, se não sabe use o fps do K6-II com toda certeza vai rodar em qualquer máquena.
Como no meu caso eu não sei quais máquenas isso vai ser executado como por exemplo eu posso saber se for usado internamente em uma intranet e peço ao pessoal de infra para me passar uma auditoria. Então publicamente onde todo tipo de PC se conecta na internet, então preferir levar o resto da aplicação em 16fps.

Terceiro teste: Intervalos de chamadas de métodos

Testando chamada de métodos por intervalos de tempos cheguei a conclusão que é impossível alcançar uma perfeição no caso de uso de intervalos por for. Tem até um documento no LiveDocs que reforça meu pensamento, como a aplicação é feita colaborativa, o uso de loops como os citdos no título deste artigo, faz com que a dependência do hardware seja um fator descritivo entre qual delas irá rodar mais rápido, como eu preciso controlar isso e executar no mesmo intervalo de tempo, então eu preciso realmente usar Timer e não for or do while.

Timers, são ótimos nisso, qualquer aplicativo multi-usuário e colaborativo que se preze usa Timers para despachar eventos. O que em minha super máquena potente não sentirá isso nem tampouco a AMD K6-II. Ambas farão a tarefa no mesmo tempo.

Quarto teste: Tamanho do SWF

Como já cheguei a uma conclusão e que muitos dizem que me preciptei, você não espera pelo futuro próximo para saber que naquile dia eu previ o futuro.
Usar módulos não funciona, o que eu usei? o MASAPI, não preciso nem explicar o por que do uso, ele por sí só se explica.
Separo todas as partes por swf do tipo (Application), e carrego no Main Application todas as dependências dos arquevos externos e o framework por RSL, o que resulta para eu um SWF com 30kb e o MASAPI cuida do resto.
Então feito, tamanho de SWF não será problema. Eu vi que um conhecido meu o Arthur lançou um chamado Bulk Loader . Sem dúvida pelo que já li é promissor para caramba, não testei, mais comparando com a capacidade dos criadores e colaboradores, eles não faz besteiras.

Quinto teste – Arquetetura usada para Design Patterns: MVC

Tem gente que ainda acredita no Carningorm da Adobe, eu desaconselho usar, o Carningorm teve seu imporante papel na evolução do Flex e é inquestionável seu uso na versão do Flex 1.5. Já não tenho o que dizer na versão 2.0. No Flex 2, o SDK ganhou tanta maturidade que o que eu vi e vejo por ai é gente usando seu próprio framework para MVC, não faz sentindo usar um framework que para você no campo real não agrega valor tanto do lado do desenvolvedor para treinar sua equepe em aprender Carningorm quanto para quem está pagando por ele.
Por que não focar sua equepe em desenvolver seu próprio framework particular?
Foi e é o que faço sempre em meus projetos específicos e em consultoria. Focar a empresa em desenvolver seu próprio framework para MVC, assim eu tenho de imediato do lado do desenvolvedor uma certa intimidade no que foi feito, a conversa flui mais rápida do que algo que já está pronto no mercado e você tem que adaptá-lo até o máximo para rodar.

Porém nesse específico caso como já havia-se feito parte do software em PureMVC, tive que continuar com o PureMVC. Quem não conhece vale a pena e muito, o PureMVC tem menos idade que o Carningorm, mais é estilo completão, uma de suas características que batem o Carningorm é a documentação completa, coisa que até hoje Carningorm não definiu nada além de tutorial defasado e sem perspectiva de sobrevivência.
O que mais gostei e estou enamorado com o PureMVC são o Facade (extrutura singleton para MVC), Observer(provê encapsulamento do objeto na notificação do callback) .

No meu pessoal, eu copiei essa idéia, facilita muito deixa a complexidade de lado, deixa livre a dependência de versões do Flex SDK.

Sexto teste: Trabalho em equepe de duas pessoas acima.

Sem dúvida um controle de versão é ótimo nestes casos, use o SVN, ele tem se comportado bem com o Flex Builder tanto plug-in quanto Stand Alone. CVS é bom mais não tem comandos que o SVN possui. Já que todos dizem que o SVN é usado em grande maioria e será a substituto do CVS.
Para trabalhar com o Flex Project e SVN, você pode marcar todos os diretórios do seu projeto menos é claro da pasta BIN, não faça isso, caso contrário seu swf terá comportamentos que só o voodoo poderá explicar.

No caso de trabalho solitário, você sozinho pode controlar o histórico local de seu .mxml ou .as, pois o Flex Builder 2/3 já vem o History Local que por padrão guarda até 10x o arquevo salvo. É uma boa quando você quer voltar as alterações de arquevos independentes.

Sétimo teste: Internacionalização.

Eu já vi e desaconselho, se a sua aplicação for vista ou usada apenas por brasileiros, por que usar Multi-Idiomas? Isso é um trabalho de trouxa que quer impressionar o chefe ou à sí mesmo em dizer que tal aplicativo é visualizado em vários idiomas. Lembre-se do alvo, não esqueça que o propósito fundamental do Flex é focado no usuário. Se ele fala só português e será usado só por quem domina o idioma, esqueça essa questão.
Agora no caso de aplicações para américa latina ou mundo, ai sim o uso da internacionalização ( Resource Bundle) é obrigatório, constando neste caso não use traduções dentro do MXML ou actionscript, por favor use o compilador para isso.

Conclusão desta primeira parte.

A segunda parte está vindo por ai.

6 thoughts on “#1 – Planejando uma aplicação RIA de sucesso, cuidados que deve-se tomar.

  1. Igor, excelente artigo! Uma vez que o Flex tem permitido aos que realmente o estudam desenvolver aplicações de primeiro nível, com posibilidade de ganhar a web, essas preocupações tornam-se fundamentais! Obrigado por compartilhar!

    Abração do Ved

  2. Legas as dicas Igor, só discordo um pouco sobre a Internacionalização. Acho que “preparar” a aplicação para que de forma fácil e rápida, aceitar dicionários para outros idiomas é uma peça importante, mesmo que, por ora, a aplicação seja apenas para brasucas. Se pensarmos que hoje nossa aplicação é nacional, mas podendo se extender para outros paises, isso evitaria talvez retrabalho. Não acha?

    :)

    []´s

  3. gostaria de reduzir meus swf, ja usei o mxmlx -optimize=true app.mxml ja ajudou muito vi no seu artigo sobre RSL como funciona ..!
    Obrigado pela atenção…

  4. Camarada, estou iniciando no flex. Será possivel vc me enviar um exemplo do MASAPI com o flex? Por favor.

  5. Bom dia Igor, cara tentei vairas vezes ultilizar esta API, mas sem sucesso … tem como vc me enviar um exemplo de como ultilizar com o Flex … nao achei nada na web … sei lar um exemplo simple menu principal chamando um form …

    at.
    Robson Salles
    robsonsalles@pop.com.br

Comments are closed.