Aggressiv minneoptimering i Flash Player 10.1
Minnesoptimering av externt inladdade bilder kan ge prestandaproblem.
Flashspelare 10.1 har en rad minnesoptimeringar för att kunna fungera optimalt på handhållna enheter. Tyvärr kan detta i vissa fall påverka prestandan negativt.
Adobe har gjort ett utmärkt jobb när det kommer till prestanda och minneshantering i flashspelare 10.1, vilket var nödvändigt för att Flash skulle fungera bra på mobila enheter med sämre hårdvara. Det gör också att innehåll som skapats i första hand för kraftfulla skrivbordsdatorer har en chans att fungera okej på mobila enheter.
Men det finns också lägen då de nya optimeringarna i flashspelare 10.1 kan försämra prestanda. I ett projekt upptäckte vi att den aggressiva minnesoptimeringen i flashspelare 10.1 påverkade prestandan, speciellt animationer, i vissa situationer.
Det här exemplet visar hur flashspelare 10.1 släpper minnet för inlästa bilder efter en kort tid av inaktivitet.
Vad exemplet visar är hur flashspelaren allokerar minne för bitmapbilder. I flashspelare 10.0 ligger minnet hela tiden kvar på samma nivå. Det intressanta är hur flashspelare 10.1 hanterar inladdade bilder. När bilder inte animeras tas de bort från minnet och kvar finns endast skärmbufferten. När bilderna ska animeras igen återskapas de, gissningsvis från komprimerade versioner som redan finns i minnet, så att de kan användas när grafiken ska renderas om. Det resulterar i en extrem minnesoptimering där minnet rasar ned till en tiondel av dess ursprungliga storlek. Imponerande.
Tyvärr har den här typen av optimering en negativ sidoeffekt. När skärmen ska uppdateras, vid animationer t.ex., måste de först gå från komprimerad till okomprimerad form. Detta går relativt snabbt, men eftersom det oftast sker precis innan en animation så blir det väldigt märkbart. Vi upptäckte det här beteendet i en stor 360 snurra som användaren själv kunde navigare inom. Prestandaförlusten gjorde applikationen i stort sett oanvändbar.
Det finns inget dokumenterat sätt att slå av minnesoptimeringen för inlästa bilder, men man kan gå runt problemet genom att "smutsa" ner den inlästa bilden genom att sätta om ett pixelvärde på en pixel i bilden.
Postat 8/27/2010, Kommentarer (1)Taggar: flash optimering
Kommentarer:
Kommentera inlägget