[ Adobe Flex ] Processamentos longos

quarta-feira, 25/08/2010 12:27 am  

Já tem algum tempo que estou para publicar esta informação, que pode ajudar muita gente a resolver uma encrenca quando se precisa efetuar um processamento de uma quantidade “ignorante” de dados e o Flash Player Runtime não ajuda…

Em um projeto me deparei com este “inconveniente”, onde estava lá a aplicação executando o processamento a todo vapor, passado 15 segundo uma mensagem me aparece questionando se eu deixo ou não o processamento continuar… Mas como assim?!

Então fui a pesquisa, verifiquei que devido a regras de segurança e respectivas políticas da Runtime para proteger os navegantes pela Web a fora, de algum engraçadinho fazer um código pesado que trave o web browser do pobre cidadão, ou mesmo vire um vortex de consumo de processamento.

Infelizmente não achei a referência que havia lido na época que me levaram as respectivas informações:

1 – o tempo padrão de processamento contínuo de um algoritmo executado pelo Flash Player Runtime é de 15 segundos.

2 – existe a possibilita de estender esse tempo até 60 segundos, porém no meu caso não iria em alguns cenários ser o suficiente para processar a quantidade sem noção de dados que o usuário quer executar.


Foi ai que os meus estudos e interesse por desenvolvimento de games no Flash me salvaram a pele…


No Flex é possível criar uma classe que herde de Sprite, que nada mais é que um “filme”, onde nesse filme eu sei que existem quadros, e que nesses quadros eu poderia fragmentar meu processamento da quantidade sem noção de dados. E foi exatamente isto que eu fiz.


Para entender a minha linha de raciocíneo observe a imagem a seguir:

Sei que no Flex é possível fazer miséria com registro e tratamento de eventos, para a minha e possivelmente a sua alegria também, existe um evento nessa classe que trata o evento de quando entra em um novo quadro renderizado: Event.ENTER_FRAME, e foi exatamente ali que resolvi o problema, fragmentando meu processamento em blocos dentro de cada quadro que será executado.


Legal já te contei a solução, agora para te ajudar um pouco mais, fiz um exemplo de projeto implementando essa idéia, segue:

Download: LongProcessing.zip

SVN: http://erkobridee.googlecode.com/svn/trunk/adobe_flex/LongProcessing

O código pode ser visualizado nesse [link]


Tela que indica o processamento dos blocos:

Eis a classe que faz a mágica: ExportHTMLHelper nesta classe escrevi comentários importantes que devem ser considerados na hora de implementar o seu respectivo código de processamento.

Essa classe foi estruturada de modo a me gerar o respectivo resultado expresso pelo modelo de HTML final que eu tinha em mente: export_model.html

Tela após o termino do processamento, possibilitando salvar o resultado:

Para essa aplicação fiz um export para um HTML simples apenas para exemplificar.


Bom espero que esse exemplo lhe seja útil.


, , , , , ,

Este post foi escrito por:

- que escreveu 500 post(s).


Entre em contato