Almacenamiento en caché de los objetos de visualización

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

El tamaño de sus diseños en Flash irá creciendo, tanto si está creando una aplicación como si realiza complejas animaciones mediante scripts, por lo que deberá tener en cuenta el rendimiento y la optimización. Si tiene contenido que permanece estático (como una instancia de Shape rectangular), Flash Player y AIR no optimizarán el contenido. Por lo tanto, si cambia la posición del rectángulo, Flash Player o AIR redibujan toda la instancia de Shape.

Se pueden almacenar en caché los objetos de visualización especificados para mejorar el rendimiento del archivo SWF. El objeto de visualización es una superficie , básicamente una versión de mapa de bits de los datos vectoriales de la instancia, que son datos que no deseará que cambien mucho a lo largo del archivo SWF. Por consiguiente, las instancias para las que está activada la caché no se vuelven a dibujar continuamente mientras se reproduce el archivo SWF, lo que permite que el archivo SWF se represente rápidamente.

Nota: es posible actualizar los datos vectoriales, momento en el cual se recrea la superficie. Por tanto, los datos vectoriales almacenados en caché en la superficie no tienen por qué permanecer intactos en todo el archivo SWF.

Al establecer la propiedad cacheAsBitmap del objeto de visualización en true , el objeto de visualización almacena en caché una representación de mapa de bits de sí mismo. Flash Player o AIR crean un objeto de superficie para la instancia, que es un mapa de bits almacenado en caché, en lugar de los datos vectoriales. Si cambia los límites del objeto de visualización, la superficie se recrea en lugar de modificarse su tamaño. Las superficies pueden anidarse dentro de otras superficies. La superficie secundaria copia el mapa de bits en su superficie principal. Para obtener más información, consulte Activación de almacenamiento de mapas de bits en caché .

Las propiedades opaqueBackground y scrollRect de la clase DisplayObject se relacionan con el almacenamiento en caché de mapa de bits a través de la propiedad cacheAsBitmap . Aunque estas propiedades son independientes entre sí, las propiedades opaqueBackground y scrollRect funcionan mejor cuando un objeto se almacena en caché como un mapa de bits; las ventajas de rendimiento de las propiedades opaqueBackground y scrollRect solo se evidencian cuando se establece cacheAsBitmap en true . Para obtener más información sobre el desplazamiento del contenido de objetos de visualización, consulte Desplazamiento lateral y vertical de objetos de visualización . Para obtener más información sobre la configuración de un fondo opaco, consulte Configuración de un color de fondo opaco .

Para obtener información sobre el enmascaramiento del canal alfa, que requiere que establezca la propiedad cacheAsBitmap como true , consulte Enmascarar objetos de visualización .

Cuándo es conveniente activar la caché

La activación de la caché para un objeto de visualización crea una superficie, lo que presenta algunas ventajas como, por ejemplo, una mayor velocidad de representación de animaciones vectoriales complejas. Existen varias situaciones en las que deseará activar la caché. Podría parecer que siempre es preferible activar la caché para mejorar el rendimiento de los archivos SWF; sin embargo, hay situaciones en las que la activación de la caché no mejora el rendimiento e incluso lo reduce. En esta sección se describen situaciones en las que debe utilizarse la activación de la caché y en las que deben emplearse objetos de visualización normales.

El rendimiento global de los datos almacenados en caché depende de la complejidad de los datos vectoriales de las instancias, de la cantidad de datos que cambie y de si ha establecido la propiedad opaqueBackground . Si cambia zonas pequeñas, la diferencia entre el uso de una superficie y el uso de datos vectoriales puede ser insignificante. Es aconsejable probar ambas situaciones antes de implementar la aplicación.

Cuándo es conveniente utilizar la caché de mapa de bits

A continuación se incluyen situaciones típicas en las que pueden apreciarse ventajas significativas al activar la caché de mapa de bits.

  • Imagen de fondo compleja Una aplicación que contiene una imagen de fondo compleja y detallada de datos de vectoriales (quizás una imagen en la que aplica el comando Trazar mapa de bits o ilustraciones que ha creado en Adobe Illustrator®). Podrían animarse los caracteres del fondo, lo que ralentizaría la animación porque el fondo necesita la regeneración constante de los datos vectoriales. Para mejorar el rendimiento, se puede establecer la propiedad opaqueBackground del objeto de visualización de fondo en true . El fondo se representa como mapa de bits y puede redibujarse rápidamente, por lo que la animación se reproduce con mucha mayor velocidad.

  • Campo de texto con desplazamiento: aplicación que muestra una gran cantidad de texto en un campo de texto con desplazamiento. Se puede colocar el campo de texto en un objeto de visualización definido como desplazable con límites con desplazamiento (propiedad scrollRect ). De este modo, se permite un desplazamiento rápido por los píxeles de la instancia especificada. Cuando el usuario se desplaza por la instancia del objeto de visualización, Flash Player o AIR mueven hacia arriba los píxeles desplazados y generan la región recién expuesta en lugar de regenerar todo el campo de texto.

  • Sistema de ventanas: aplicación con un complejo sistema de ventanas superpuestas. Cada ventana puede abrirse o cerrarse (por ejemplo, las ventanas de un navegador web). Si se marca cada ventana como una superficie (estableciendo la propiedad cacheAsBitmap en true ), cada ventana se aísla y se almacena en caché. Los usuarios pueden arrastrar las ventanas para que se puedan superponer y cada ventana no necesita regenerar el contenido vectorial.

  • Enmascaramiento del canal alfa: si se usa el enmascaramiento del canal alfa, la propiedad cacheAsBitmap se debe establecer en true . Para obtener más información, consulte Enmascarar objetos de visualización .

La activación de la caché de mapa de bits en todas estas situaciones mejora el nivel de respuesta e interactividad de la aplicación, pues optimiza los gráficos vectoriales.

Asimismo, si se aplica un filtro a un objeto de visualización, cacheAsBitmap se establece automáticamente en true , aunque el usuario lo establezca explícitamente en false . Si se quitan todos los filtros del objeto de visualización, la propiedad cacheAsBitmap recupera el valor que se estableció por última vez.

Cuándo es conveniente evitar utilizar la caché de mapa de bits

El uso de esta función en circunstancias inadecuadas, puede afectar de forma negativa al rendimiento del archivo SWF. Cuando utilice la caché de mapa de bits, recuerde las siguientes directrices:

  • No haga un uso abusivo de las superficies (objetos de visualización para los que está activada la caché). Cada superficie utiliza más memoria que un objeto de visualización normal, lo que significa que solo deberá utilizar las superficies cuando necesite mejorar el rendimiento de la representación.

    Un mapa de bits almacenado en caché utiliza bastante más memoria que un objeto de visualización normal. Por ejemplo, si una instancia de Sprite en el escenario tiene un tamaño de 250 por 250 píxeles, al almacenarse en caché podría utilizar 250 KB en lugar de 1 KB cuando se trata de una instancia de Sprite normal (no almacenada en caché).

  • Evite aplicar zoom a las superficies almacenadas en caché. Si utiliza en exceso la caché de mapa de bits, se consume una gran cantidad de memoria (consulte el apartado anterior), especialmente si aplica el zoom para acercar el contenido.

  • Utilice superficies para instancias de objetos de visualización que sean principalmente estáticas (sin animación). Puede arrastrar o mover la instancia, pero el contenido de la instancia no debe incluir demasiada animación ni cambiar mucho. (La animación o el cambio de contenido son más frecuentes en las instancias de MovieClip que contienen animación o en las instancias de Video.) Por ejemplo, si gira o transforma una instancia, esta cambia entre la superficie y los datos vectoriales, lo que dificulta el procesamiento y afecta de forma negativa al archivo SWF.

  • Si mezcla superficies con datos vectoriales, aumentará la cantidad de procesamiento que deben llevar a cabo Flash Player y AIR (y, a veces, el equipo). Agrupe las superficies tanto como sea posible; por ejemplo, cuando cree aplicaciones de gestión de ventanas.

  • No almacene en caché los objetos cuyos gráficos cambien frecuentemente. Cada vez que se aplica la escala, el sesgo, la rotación del objeto de visualización, el cambio del parámetro alfa o la transformación de color, el movimiento de los objetos de visualización secundarios o el dibujo utilizando la propiedad de gráficos, la caché de mapa de bits se vuelve a dibujar. Si esto sucede en cada fotograma, el motor de ejecución debe dibujar el objeto en un mapa de bits y, a continuación, copiar ese mapa de bits en el escenario, lo que implica un trabajo adicional si se compara con solo dibujar el objeto no almacenado en caché en el escenario. El inconveniente menor de rendimiento del almacenamiento en caché frente a la frecuencia de actualización depende de la complejidad y el tamaño del objeto de visualización y solo se puede determinar probando el contenido específico.

Activación de almacenamiento de mapas de bits en caché

Para activar la caché de mapa de bits para un objeto de visualización, debe establecerse su propiedad cacheAsBitmap en true :

mySprite.cacheAsBitmap = true;

Una vez establecida la propiedad cacheAsBitmap en true , es posible observar que el objeto de visualización ajusta automáticamente los píxeles a coordenadas enteras. Al probar el archivo SWF, debería apreciarse un aumento considerable en la velocidad de representación de imágenes vectoriales complejas.

Si se dan una o varias de las siguientes condiciones, no se crea ninguna superficie (mapa de bits almacenado en caché) aunque cacheAsBitmap se haya establecido en true :

  • El mapa de bits tiene una altura o una anchura superior a 2880 píxeles.

  • No se puede asignar el mapa de bits (se produce un error de memoria insuficiente).

Matrices de transformación de mapa de bits almacenadas en caché

En las aplicaciones de AIR para dispositivos móviles, es necesario establecer la propiedad cacheAsBitmapMatrix siempre que se defina la propiedad cacheAsBitmap . El establecimiento de esta propiedad permite aplicar un mayor rango de transformaciones al objeto de visualización sin activar la representación.

mySprite.cacheAsBitmap = true; 
mySprite.cacheAsBitmapMatrix = new Matrix();

Cuando se establece esta propiedad de matriz, se puede aplicar la siguiente transformación adicional al objeto de visualización sin volver a almacenar el objeto en caché:

  • Movimiento o conversión sin ajuste a píxeles

  • Girar

  • Escala

  • Sesgo

  • Cambio de alfa (transparencia de entre 0 y 100%)

Estas transformaciones se aplican directamente al mapa de bits almacenado en caché.