Uma chave para compreender como melhorar o desempenho do aplicativo é compreender como o tempo de execução da plataforma Flash executa o código. O tempo de execução opera em "loop" com certas ações que ocorrem em cada "quadro". Neste caso um quadro é simplesmente um bloco de tempo determinado pela taxa de quadros especificada para o aplicativo. A quantidade de tempo alocada para cada quadro corresponde diretamente à taxa de quadros. Por exemplo, se especificar uma taxa de quadros de 30 quadros por segundo, o tempo de execução tenta fazer com que cada quadro permaneça um trigésimo de segundo.
Você especifica a taxa de quadros inicial do aplicativo na hora da autoria. Você pode definir a taxa de quadros usando as configurações do Adobe® Flash® Builder™ ou do Flash Professional. E possível especificar a taxa de quadros inicial no código Defina a taxa de quadros em um aplicativo apenas ActionScript aplicando a marca de metadados
[SWF(frameRate="24")]
à classe de documentos raiz. No MXML, defina o atributo
frameRate
no aplicativo ou na marca WindowedApplication.
Cada loop de quadros consiste em duas fases divididas em três partes: eventos, evento
enterframe
e renderização.
A primeira fase inclui duas partes (eventos e o evento
enterframe
) ambos podem levar potencialmente à chamada do código. Na primeira parte da primeira fase, os eventos em tempo de execução chegam e são despachados. Esses eventos podem representar conclusão ou progresso de operações assíncronas como, por exemplo, uma resposta dos dados da carga ao longo de uma rede. Incluem também eventos de entradas do usuário. À medida que os eventos são despachados, o tempo de execução executa o código nos ouvintes que você registrou. Se não ocorrer nenhum evento, o tempo de execução aguarda até completar essa fase de execução sem desempenhar qualquer ação. O tempo de execução nunca acelera a taxa de quadros por causa de falta de atividade. Se ocorrerem eventos durante outras partes do ciclo de execução, o tempo de execução coloca em fila esses eventos e os despacha para o próximo quadro.
A segunda parte da primeira fase é o evento
enterframe
. Esse evento é diferente dos outros porque é sempre despachado um por quadro.
Depois que todos os eventos são despachados, começa a fase de renderização do loop de quadros. Nesse momento, o tempo de execução calcula o estado de todos os elementos visíveis na tela e os desenha na tela. Em seguida, o processo repete-se sozinho, como um corredor em volta de uma pista de corrida.
Nota:
Para eventos que incluem uma propriedade
updateAfterEvent
, a renderização pode ser forçada a ocorrer imediatamente em vez de esperar a fase de renderização. No entanto, evite usar
updateAfterEvent
se esta propriedade causar frequentemente problemas de desempenho.
É mais fácil imaginar que as duas fases no loop de quadros demoram o mesmo tempo. Nesse caso, durante a metade de cada loop de quadros, os operadores de eventos e o código do aplicativo estão em execução e, na outra metade, a renderização ocorre. No entanto, a realidade em geral é diferente. Às vezes o código do aplicativo demora mais da metade do tempo disponível no quadro, prolongando sua alocação de tempo e reduzindo a alocação disponível para a renderização. Em outros casos, principalmente, com conteúdo visual complexo como, por exemplo, filtros e modos de mesclagem, a renderização requer mais da metade do tempo dos quadros. Visto que o tempo real que as fases demoram é flexível, o loop de quadros é conhecido normalmente como "pista de corrida elástica".
Se as operações combinadas do loop de quadros (execução do código e renderização) demorarem muito, o tempo de execução não consegue manter a taxa de quadros. O quadro expande-se, demorando mais que o tempo alocado, assim há um atraso antes do próximo quadro acionar. Por exemplo, se um ciclo de quadros durar mais de um trigésimo de segundo, o tempo de execução não poderá atualizar a tela a 30 quadros por segundo. Quando a taxa de quadros fica lenta, a experiência perde qualidade. A melhor animação aparece cortada. No pior dos casos, o aplicativo congela-se e a janela fica em branco.
Para obter mais detalhes sobre a execução do código de tempo de execução da plataforma Flash e o modelo de renderização, consulte os seguintes recursos: