Використання cacheasbitmap для прискорення роботи flash-додатків, edapskov

Використання cacheAsBitmap для прискорення роботи flash-додатків

Напевно, всі, хто пробували свої сили в Flash, стикалися з необхідністю прискорення візуалізації об'єктів на сцені флеш-ролика. Особливо гостро ця проблема стоїть для векторних малюнків, які самі по собі дуже вимогливі до ресурсів. Крім цього, векторні зображення часто містять градієнти і напівпрозорість. Все це вкрай негативно позначається на продуктивності Flash Player -а.

Позначену проблему з продуктивністю намагаються вирішувати по-різному. Одним із способів є кешування об'єктів за допомогою стандартного властивості cacheAsBitmap. Робить це властивість саме те, що і закладено в його назві - зберігає об'єкт у вигляді його растрового представлення, а з растром flash-плеєр працює швидше, ніж з векторними зображеннями. Дана властивість є в ActionScript 3.0 для об'єктів, які успадковують від DisplayObject (дивись шпаргалку в «Список відображення в ActionScript 3.0»). А застосовується воно неймовірно просто.

Код ActionScript 3.0:

import flash.display.Sprite; var sprite: Sprite = new Sprite (); sprite.graphics.beginFill (0x000000,1); sprite.graphics.drawCircle (200,200,100); sprite.graphics.endFill (); addChild (sprite); / * Включаємо кешування * / sprite.cacheAsBitmap = true; / * Перевіряємо * / trace (sprite.cacheAsBitmap);

Як бачите, щоб включити кешування, треба просто привласнити властивості cacheAsBitmap логічне значення true.

Що ж дає використання cacheAsBitmap на практиці? Давайте подивимося на прикладі.

Демонстрація роботи cacheAsBitmap:

В даному прикладі є флеш-ролик з 1000-ю анімованих MovieClip-ів. Причому ці мувік не тільки векторні, але ще мають і градієнтну заливку, і напівпрозорість. Природно, ролик гальмує. У лівому верхньому кутку цього ролика, під лічильником, є перемикач. За допомогою цього перемикача можна вмикати / вимикати кешування мувікліп. За замовчуванням варто false - кешування відключено. А тепер включите кешування. Що змінилося?

Насправді навіть без лічильника зрозуміло, що з включеним cacheAsBitmap наш приклад став працювати набагато швидше. Що й потрібно було довести.

[!] Що до лічильника в лівому верхньому кутку ролика, то він узятий з уроку «Моніторинг продуктивності flash-додатків». Там же розшифровуються всі його показники.

І все б було чудово, якби не було обмежень на використання cacheAsBitmap. А таких обмежень кілька:

- обмеження на розміри об'єктів;

У Flash Player можуть бути встановлені обмеження на максимальну ширину і висоту растрових зображень. Ці обмеження різні для різних версій флеш-плеєра. Втім, і допустимих розмірів, як правило, вистачає з надлишком.

- обмеження на маніпуляції з кешувального об'єктами;

Векторне вміст кешувального об'єкта має бути незмінним. Якщо воно змінюється, то відбувається перемальовування растрового представлення об'єкта. А це не тільки не прискорює продуктивність флеш-ролика, а, навпаки, вкрай негативно позначається на продуктивності. Зверніть увагу, що в наведеному вище прикладі об'єкти змінюють свою позицію щодо системи координат, але їх внутрішній вміст залишається незмінним.

- можливі помилки через брак пам'яті для кешування.

Cам поки не зустрічав, але так стверджується в Хелп. Втім, це цілком зрозуміла рекомендація, якщо врахувати, що растрове зображення, як правило, займає більше пам'яті, ніж векторне.

[!] Врахуйте, що флеш-плеєр автоматично кешируєт ті об'єкти, до яких застосовано фільтри (і до тих пір, поки до них застосовані фільтри).

[!] Про те, які цікаві ефекти можна отримати, застосувавши cacheAsBitmap до маски, згадувалося в статті «Градиентная маска засобами ActionScript 3.0».

Схожі статті