Fundamentos de la ejecución de código del motor de ejecución

Un aspecto fundamental para comprender cómo mejorar el rendimiento de la aplicación consiste en conocer el modo en que el motor de ejecución de la plataforma Flash ejecuta el código. El motor de ejecución funciona en un bucle con determinadas acciones que se producen en cada “fotograma”. En este caso, un fotograma es simplemente un bloque de tiempo determinado por la velocidad de fotogramas especificada para la aplicación. La cantidad de tiempo asignada a cada fotograma se corresponde directamente con la velocidad de fotogramas. Por ejemplo, si se especifica una velocidad de fotogramas de 30 fotogramas por segundo, el motor de ejecución intenta que cada fotograma dure una trigésima parte de un segundo.

La velocidad de fotogramas inicial de la aplicación se especifica en tiempo de edición. La velocidad de fotogramas se puede establecer utilizando la configuración de Adobe® Flash® Builder™ o Flash Professional. También se puede especificar la velocidad de fotogramas inicial en el código. Establezca la velocidad de fotogramas en una aplicación de sólo ActionScript, aplicando la etiqueta de metadatos [SWF(frameRate="24")] a la clase del documento raíz. En MXML, establezca el atributo frameRate en la etiqueta Application o WindowedApplication.

Cada bucle de fotograma consta de dos fases, divididas en tres partes: eventos, el evento enterFrame y la representación.

La primera fase incluye dos partes (eventos y el evento enterFrame ) y en ambas se llamará potencialmente a su código. En la primera parte de la primera fase, los eventos del motor de ejecución llegan y se distribuyen. Estos eventos puede representar la finalización o el progreso de operaciones asíncronas como, por ejemplo, una respuesta de la carga de datos en una red. También incluyen eventos de las entradas de usuario. Conforme se distribuyen los eventos, el motor de ejecución ejecuta el código en los detectores registrados. Si no se producen eventos, el motor de ejecución espera a que se complete esta fase de ejecución sin realizar ninguna operación. El motor de ejecución nunca acelera la velocidad de fotogramas debido a la falta de actividad. Si los eventos se producen durante otras partes del ciclo de ejecución, el motor de ejecución pone en cola estos eventos y los distribuye en el siguiente fotograma.

La segunda parte de la primera fase es el evento enterFrame . Este evento es distinto a los demás, ya que siempre se distribuye una vez por fotograma.

Una vez distribuidos todos los eventos, comienza la fase de representación del bucle del fotograma. En ese momento, el motor de ejecución calcula el estado de todos los elementos visibles en pantalla y los dibuja en la pantalla. Posteriormente, el proceso se vuelve a repetir, de forma similar a un corredor que da vueltas a una pista.

Nota: para los eventos que incluyen una propiedad updateAfterEvent , es posible forzar la representación para que se produzca de forma inmediata en lugar de esperar a la fase de representación. No obstante, evite el uso de updateAfterEvent si esto suele implicar problemas de rendimiento.

Resulta más fácil imaginar que las dos fases del bucle de fotograma adoptan cantidades similares de tiempo. En ese caso, durante la mitad de cada bucle de fotograma, los controladores de eventos y el código de la aplicación se están ejecutando y durante la otra mitad se está llevando a cabo la representación. Sin embargo, la realidad suele ser diferente. En ocasiones, el código de la aplicación tarda más de la mitad del tiempo disponible en el fotograma, ampliando su asignación de tiempo y reduciendo la asignación disponible para la representación. En otros casos, especialmente con el contenido visual completo como, por ejemplo, modos de fusión y filtros, la representación requiere más de la mitad del tiempo del fotograma. El tiempo real empleado en las fases es flexible, por lo que el bucle de fotograma se suele denominar “pista elástica”.

Si las operaciones combinadas del bucle de fotograma (representación y ejecución de código) tardan demasiado, el motor de ejecución no podrá mantener la velocidad de fotogramas. El fotograma se expande, tardando más tiempo que su tiempo asignado, por lo que se activa un retraso antes del siguiente fotograma. Por ejemplo, un bucle de fotograma tarda más de una trigésima parte de un segundo, el motor de ejecución no podrá actualizar la pantalla a 30 fotogramas por segundo. Si la velocidad de fotogramas se ralentiza, la experiencia se degrada. Una mejor animación se vuelve irregular. En el peor caso, la aplicación se bloquea y la ventana se queda en blanco.

Para obtener más información sobre la ejecución del código del motor de ejecución de la plataforma Flash y el modelo de representación, consulte los siguientes recursos: