Memorizzazione nella cache di oggetti di visualizzazione

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Man mano che i progetti di Flash crescono di dimensioni, indipendentemente dal fatto che si stia creando un'applicazione o delle animazioni con script complesse, è necessario valutare gli aspetti legati alle prestazioni e all'ottimizzazione. Quando avete un contenuto che rimane statico (ad esempio un'istanza di Shape sotto forma di rettangolo), Flash Player o AIR non ottimizzano il contenuto. Di conseguenza, quando cambiate la posizione del rettangolo, Flash Player o AIR deve ridisegnare l'intera istanza di Shape.

Per migliorare le prestazioni dei file SWF, potete memorizzare nella cache oggetti di visualizzazione specifici. L'oggetto di visualizzazione è una superficie , essenzialmente una versione bitmap dei dati vettoriali dell'istanza, vale a dire dei dati che non si intende modificare in modo significativo nel corso del file SWF. Pertanto, le istanze per cui è stata attivata la memorizzazione nella cache non vengono continuamente ridisegnate durante le riproduzione del file SWF; questo consente un rendering più rapido del file.

Nota: potete aggiornare i dati vettoriali; quando eseguite l'aggiornamento, la superficie viene ricreata. Per questo motivo, i dati vettoriali memorizzati nella cache della superficie non devono restare immutati per tutto il file SWF.

L'impostazione della proprietà cacheAsBitmap di un oggetto di visualizzazione su true rende la cache dell'oggetto di visualizzazione una rappresentazione bitmap di se stessa. Flash Player o AIR crea un oggetto di superficie per l'istanza, rappresentato da una bitmap memorizzata nella cache invece che da dati vettoriali. Cambiando i limiti dell'oggetto di visualizzazione, la superficie viene ricreata anziché ridimensionata. Le superfici possono essere nidificate all'interno di altre superfici. La superficie secondaria copia la bitmap nella superficie principale. Per ulteriori informazioni, vedete la sezione Attivazione della memorizzazione di bitmap nella cache .

Le proprietà opaqueBackground e scrollRect della classe DisplayObject si riferiscono alla memorizzazione della bitmap nella cache mediante la proprietà cacheAsBitmap . Nonostante si tratti di proprietà indipendenti l'una dall'altra, opaqueBackground e scrollRect funzionano in modo ottimale quando un oggetto viene memorizzato nella cache come bitmap; in altre parole, è possibile valutare i vantaggi, in termini di prestazioni, dell'uso delle proprietà opaqueBackground e scrollRect solo impostando cacheAsBitmap su true . Per ulteriori informazioni sullo scorrimento del contenuto di oggetti di visualizzazione, vedete la sezione Panoramica e scorrimento di oggetti di visualizzazione . Per ulteriori informazioni sull'impostazione di uno sfondo opaco, vedete la sezione Impostazione di un colore di sfondo opaco .

Per informazioni sull'effetto maschera del canale alfa, che richiede l'impostazione della proprietà cacheAsBitmap su true , vedete la sezione Mascheratura degli oggetti di visualizzazione

Quando attivare la memorizzazione nella cache

L'attivazione della funzione di memorizzazione nella cache di un oggetto di visualizzazione consente di creare una superficie; questo presenta diversi vantaggi, fra cui quello di consentire un rendering più rapido delle animazioni vettoriali complesse. L'attivazione della memorizzazione nella cache può essere utile in diversi casi. Nonostante questa funzione possa sembrare utile per migliorare le prestazioni dei file SWF in tutti i casi, in alcune situazioni questa funzione non solo non migliora le prestazioni, ma, anzi, le può peggiorare. In questa sezione vengono descritti i vari scenari in cui utilizzare la memorizzazione nella cache e i casi in cui è opportuno invece usare i normali oggetti di visualizzazione.

Le prestazioni generali dei dati memorizzati nella cache dipendono dalla complessità dei dati vettoriali delle istanze, dalla quantità di dati modificati e dal fatto che sia stata impostata o meno la proprietà opaqueBackground . Se state modificando aree piccole, la differenza tra l'uso di una superficie e l'uso dei dati vettoriali è minima. Prima di distribuire l'applicazione, potrebbe essere utile provare entrambi gli scenari.

Quando utilizzare la memorizzazione delle bitmap nella cache

Segue una descrizione degli scenari in cui l'attivazione della memorizzazione delle bitmap nella cache può comportare notevoli vantaggi.

  • Immagine di sfondo complessa: un'applicazione contenente un'immagine di sfondo complessa e dettagliata di dati vettoriali (magari un'immagine in cui è stato applicato il comando Ricalca bitmap o un'immagine creata in Adobe Illustrator®). Potete animare i personaggi sullo sfondo, operazione che però rallenta l'animazione perché lo sfondo deve continuamente rigenerare i dati vettoriali. Per migliorare le prestazioni, potete impostare la proprietà opaqueBackground dell'oggetto di visualizzazione dello sfondo su true . Viene eseguito il rendering dello sfondo come bitmap così che possa essere ridisegnato velocemente; in questo modo l'animazione viene riprodotta più rapidamente.

  • Campo di testo a scorrimento: un'applicazione che visualizza una grande quantità di testo in un campo di testo a scorrimento. Potete inserire il campo di testo in un oggetto di visualizzazione impostato come scorrevole con contorni a scorrimento (proprietà scrollRect ). In questo modo si attiva lo scorrimento veloce dei pixel per l'istanza specificata. Quando un utente esegue lo scorrimento dell'istanza dell'oggetto di visualizzazione, Flash Player o AIR spostano verso l'alto i pixel già visualizzati e generano l'area che viene mostrata invece di rigenerare l'intero campo di testo.

  • Sistema a finestre: un'applicazione con un complesso sistema di finestre che si sovrappongono. Ciascuna finestra può essere aperta o chiusa (per esempio, le finestre dei browser Web). Contrassegnando ciascuna finestra come superficie (impostando la proprietà cacheAsBitmap su true ), ogni finestra viene isolata e memorizzata nella cache. Gli utenti possono trascinare le finestre così che si sovrappongano tra loro, e ciascuna finestra non deve rigenerare il contenuto vettoriale.

  • Applicazione dell'effetto maschera ai canali alfa: se si utilizza un'applicazione dell'effetto maschera ai canali alfa, è necessario impostare la proprietà cacheAsBitmap su true . Per ulteriori informazioni, vedete Mascheratura degli oggetti di visualizzazione .

L'attivazione della memorizzazione di bitmap nella cache in tutti questi scenari migliora la sensibilità e l'interattività dell'applicazione ottimizzando le immagini vettoriali.

Inoltre, ogni volta che si applica un filtro a un oggetto di visualizzazione, la proprietà cacheAsBitmap viene automaticamente impostata su true , anche se è stata esplicitamente impostata su false . Cancellando tutti i filtri dall'oggetto di visualizzazione, la proprietà cacheAsBitmap ritorna sul valore sul quale era stata impostata.

Quando evitare di utilizzare la memorizzazione delle bitmap nella cache

L'uso di questa funzione in circostanze errate può influire in maniera negativa sulle prestazioni del file SWF. Quando utilizzate la memorizzazione delle bitmap nella cache, tenete presenti le seguenti linee guida:

  • Non usate in modo eccessivo le superfici (oggetti di visualizzazione con memorizzazione nella cache abilitata). Ogni superficie usa più memoria di un oggetto di visualizzazione normale; pertanto, dovreste abilitare le superfici solo se avete bisogno di migliorare le prestazioni del rendering.

    Una bitmap memorizzata nella cache può utilizzare molta più memoria di una normale istanza di oggetto di visualizzazione. Se, ad esempio, un'istanza Sprite sullo stage misura 250 pixel per 250 pixel, quando viene memorizzata nella cache potrebbe utilizzare 250 KB invece di 1 KB, situazione che si verifica se si tratta di un'istanza Sprite normale (non memorizzata nella cache).

  • Evitate di ingrandire le superfici memorizzate nella cache. Se abusate della funzione di memorizzazione delle bitmap nella cache, si determina un consumo notevole di memoria (vedete il punto precedente), specialmente quando effettuate uno zoom sul contenuto.

  • Usate le superfici per le istanze di oggetti di visualizzazione che sono prevalentemente statiche (prive di animazione). Potete trascinare o spostare l'istanza, ma il contenuto della stessa non dovrebbe animarsi né risultare molto modificato (animazione o modifica del contenuto sono più comuni con istanze di MovieClip contenenti animazione o con un'istanza di Video). Se, ad esempio, ruotate o trasformate un'istanza, questa passa da superficie a dati vettoriali, cosa che rende difficile l'elaborazione e influisce negativamente sul file SWF.

  • L'uso combinato di superfici e dati vettoriali aumenta la quantità di elaborazione che Flash Player e AIR, e talvolta il computer, devono eseguire. Raggruppate il più possibile insieme le superfici, ad esempio quando create delle applicazioni a finestra.

  • Non memorizzate nella cache oggetti la cui grafica cambia frequentemente. Ogni volta che ridimensionate, inclinate, ruotate l'oggetto di visualizzazione, modificate la trasformazione alfa o di colore, spostate oggetti di visualizzazione secondari o disegnate utilizzando la proprietà grafica, la cache delle bitmap viene ridisegnata. Se questo si verifica per ogni fotogramma, il runtime deve disegnare l'oggetto in una bitmap e quindi copiare la bitmap sullo stage. Questo determina un lavoro aggiuntivo rispetto al semplice disegno dell'oggetto non inserito nella cache sullo stage. Il compromesso a livello di prestazioni tra l'inserimento nella cache e la frequenza di aggiornamento dipende dalla complessità e dalle dimensioni dell'oggetto di visualizzazione e può essere determinato solo provando il contenuto specifico.

Attivazione della memorizzazione di bitmap nella cache

Per attivare la memorizzazione di bitmap nella cache per un oggetto di visualizzazione, impostate la proprietà cacheAsBitmap dell'oggetto su true :

mySprite.cacheAsBitmap = true;

Può accadere che, dopo che avete impostato la proprietà cacheAsBitmap su true , l'istanza dell'oggetto di visualizzazione esegua automaticamente l'aggancio ai pixel su tutte le coordinate. Nel provare il file SWF, dovreste notare che il rendering delle animazioni vettoriali complesse viene eseguito più velocemente.

Se si verifica una delle condizioni elencate di seguito, la superficie (bitmap memorizzata nella cache) non viene creata anche se cacheAsBitmap è impostata su true :

  • La larghezza o l'altezza della bitmap è superiore a 2880 pixel.

  • La bitmap non viene assegnata (a causa di errore di memoria esaurita).

Matrici di trasformazione delle bitmap inserite nella cache

Nelle applicazioni AIR per dispositivi mobili, impostate la proprietà cacheAsBitmapMatrix ogni volta che configurate la proprietà cacheAsBitmap . L'impostazione di questa proprietà consente di applicare una gamma più ampia di trasformazioni all'oggetto di visualizzazione senza attivare un nuovo rendering.

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

Quando impostate questa proprietà di matrice, potete applicare la trasformazione aggiuntiva seguente all'oggetto di visualizzazione senza reinserire l'oggetto nella cache:

  • Sposta o converti senza aggancio ai pixel

  • Ruota

  • Modifica in scala

  • Inclina

  • Modifica alfa (tra 0 e 100% di trasparenza)

Queste trasformazioni vengono applicate direttamente alla bitmap memorizzata nella cache.