DeviceCentral

ESTE TEMA APARECE EN:

Optimizar ActionScript para el contenido de Flash Lite en dispositivos móviles

Debido a las limitaciones de velocidad de procesamiento y memoria de la mayoría de los dispositivos móviles, tenga en cuenta estas directrices cuando desarrolle ActionScript para contenido de Flash Lite utilizado en dispositivos móviles:

  • Simplificar el archivo y su código todo lo que sea posible. Eliminar clips de película no utilizados, suprima fotogramas y bucles de código innecesarios y procure no incluir demasiados fotogramas o fotogramas superfluos.

  • El uso de bucles FOR puede tener un alto coste por la sobrecarga que implica la comprobación de la condición en cada iteración. Cuando los costes de la iteración y la sobrecarga de los bucles son equiparables, ejecute varias operaciones por separado en lugar de usar un bucle. Es posible que el código aumente, pero mejorará el rendimiento.

  • Detener los bucles basados en fotogramas en cuanto dejen de ser necesarios.

  • Cuando sea posible, evite el procesamiento de cadenas y matrices, porque puede consumir mucha CPU.

  • Intentar siempre acceder directamente a las propiedades en lugar de usar métodos get y set de ActionScript, que implican una carga de trabajo mayor que otras llamadas a métodos.

  • Gestione los eventos juiciosamente. Aligere las matrices de escucha de eventos mediante condiciones que comprueben si existe una escucha (no es null) antes de llamarla. Borrar los intervalos activos mediante una llamada a clearInterval y elimine todas las escuchas activas mediante una llamada a removeListener antes de quitar el contenido con unloadapplication o removeapplicationClip. Flash no recupera la memoria de datos SWF (por ejemplo, de los intervalos y las escuchas) si las funciones de ActionScript siguen haciendo referencia a los datos SWF cuando se descarga un clip de película.

  • Cuando las variables ya no sean necesarias, bórrelas o establézcalas en null, con lo que se marcarán para la recolección de elementos no utilizados. Eliminar las variables ayuda a optimizar el uso de la memoria en tiempo de ejecución, porque los activos no necesarios se eliminan del archivo SWF. Es mejor eliminar variables que establecerlas en null.

  • Eliminar explícitamente las escuchas de los objetos mediante una llamada a removeListener antes de la recolección de elementos no utilizados.

  • Si la llamada a una función se realiza dinámicamente y la función pasa un conjunto fijo de parámetros, utilice call en lugar de apply.

  • Compactar los espacios de nombres (como las rutas) para reducir el tiempo de arranque. Cada nivel del paquete se compila en una instrucción IF y genera una nueva llamada Object , por lo que ahorrará tiempo si incluye menos niveles en la ruta. Por ejemplo, una ruta con los niveles com.xxx.yyy.aaa.bbb.ccc.nombreFunción hará que se cree una instancia de un objeto para com.xxx.yyy.aaa.bbb.ccc. Algunos desarrolladores de Flash utilizan software de preprocesamiento para reducir la ruta a un identificador único, como 58923409876.nombreFunción, antes de compilar el código SWF.

  • Si un archivo consta de varios archivos SWF que utilizan las mismas clases de ActionScript, no permita que esas clases seleccionen archivos SWF durante la compilación. De esta forma, podrá reducir el tiempo de descarga de los archivos y los requisitos de memoria en tiempo de ejecución.

  • Evitar utilizar Object.watch y Object.unwatch, porque cada cambio realizado en la propiedad de un objeto requiere que el reproductor determine si debe enviar una notificación del cambio.

  • Si el código de ActionScript que se ejecuta en un fotograma en la línea del tiempo requiere más de un segundo para su ejecución, considere la posibilidad de fragmentar ese código y ejecutarlo en varios fotogramas.

  • Eliminar las instrucciones trace del código cuando publique el archivo SWF. Para ello, seleccione la casilla de verificación Omitir acciones de trazado en la ficha Flash del cuadro de diálogo Configuración de publicación.

  • La herencia aumenta el número de llamadas a métodos y emplea más memoria: una clase que incluya toda la funcionalidad debe ser más eficaz en tiempo de ejecución que una clase que herede algunas de las funciones de una superclase. Por tanto, puede ser necesario encontrar la mejor relación entre la extensibilidad de las clases y la eficacia del código durante el diseño.

  • Cuando un archivo SWF carga otro archivo del mismo tipo que contiene una clase de ActionScript personalizada (por ejemplo, foo.bar.CustomClass) y, a continuación, descarga el archivo SWF, la definición de clase permanece en memoria. Para ahorrar memoria, borre explícitamente todas las clases personalizadas en los archivos SWF descargados. Utilice la instrucción delete y especifique el nombre de clase completo, como: delete foo.bar.CustomClass.

  • Limitar el uso de variables globales, ya que no se marcan para la recolección de elementos no utilizados si se elimina el clip de película que las define.

  • Procurar no utilizar los componentes estándar de la interfaz de usuario (disponibles en el panel Componentes de Flash). Estos componentes están diseñados para su ejecución en equipos de sobremesa y no están optimizados para su uso en dispositivos móviles.

  • Siempre que sea posible, evite las funciones con grandes niveles de anidación.

  • Evitar las referencias a variables, objetos o funciones inexistentes. En comparación con la versión para escritorio de Flash Player, Flash Lite 2 tarda bastante en buscar las referencias a variables no existentes, lo que puede reducir considerablemente el rendimiento.

  • Evitar definir funciones mediante sintaxis anónima. Por ejemplo, miObj.nombreEvento = función{ ...}. Las funciones definidas explícitamente, como función miFunc { ...}; mi Obj.nombreEvento = miFunc; son más eficaces.

  • Reduzar el uso de funciones matemáticas y números de coma flotante. El cálculo de estos valores reduce el rendimiento. Si tiene que utilizar rutinas matemáticas, siempre puede calcular previamente los valores y almacenarlos en una matriz de variables. Recuperar los valores de una tabla de datos es mucho más rápido que dejar que Flash los calcule en tiempo de ejecución.