Кэширование экранных объектовFlash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий По мере увеличения размера проектов Flash необходимо учитывать производительность и оптимизацию независимо от того, создаете ли вы приложения или сложные анимации на основе сценариев. Если содержимое остается статическим (как экземпляр прямоугольного объекта Shape), проигрыватель Flash Player и среда AIR не оптимизируют его. Поэтому при изменении позиции прямоугольника Flash Player и AIR отрисовывают весь экземпляр Shape заново. Вы можете поместить в кэш указанные экранные объекты, чтобы повысить производительность своего SWF-файла. Экранный объект представляет собой подложку. Это обычно растровая версия векторных данных экземпляра, которые не планируется сильно изменять в пределах SWF-файла. Следовательно, экземпляры с включенным кэшированием не перерисовываются постоянно по мере воспроизведения SWF-файла, что позволяет быстро визуализировать этот файл. Примечание. Векторные данные можно обновить. При этом подложка будет воссоздана. Исходя из этого, векторные данные, которые кэшированы в подложке, не должны оставаться неизменными для всего SWF-файла.
Присвоение свойству cacheAsBitmap экранного объекта значения true приводит к тому, что объект кэширует собственное растровое представление. Проигрыватель Flash Player и среда AIR создают для экземпляра объект подложки, который представляет собой кэшированное растровое изображение, а не векторные данные. При изменении границ экранного объекта выполняется воссоздание подложки вместо изменения размера. Подложки могут быть вложены в другие подложки. Дочерняя подложка копирует свое растровое изображение на родительскую подложку. Дополнительные сведения см. в разделе «Включение кэширования растрового изображения». Свойства opaqueBackground и scrollRect класса DisplayObject относятся к кэшированию растрового изображения с помощью свойства cacheAsBitmap. Хотя три этих свойства независимы друг от друга, свойства opaqueBackground и scrollRect лучше всего функционируют, когда объект кэширован в качестве растрового изображения. Выигрыш в производительности при использовании свойств opaqueBackground и scrollRect виден только тогда, когда cacheAsBitmap присвоено значение true. Дополнительные сведения о прокрутке содержимого экранного объекта см. в разделе «Панорамирование и прокрутка экранных объектов». Дополнительные сведения об установке непрозрачного фона см. в разделе «Установка цвета непрозрачного фона». Сведения о маскировании альфа-канала, которое требует присвоения свойству cacheAsBitmap значения true, см. в разделе «Маскирование экранных объектов». Когда следует применять кэшированиеПри включении кэширования для экранного объекта создается подложка, которая обладает несколькими преимуществами (например, позволяет быстрее визуализировать сложную векторную анимацию). Существует ряд сценариев, требующих включения кэширования. Может показаться, что включать кэширование следует всегда, когда требуется повысить производительность своих SWF-файлов. Однако существуют ситуации, при которых включение кэширования не приводит к повышению производительности или даже вызывает ее снижение. В данном разделе описываются сценарии, в которых необходимо применять кэширование, и случаи использования обычных экранных объектов. Общая производительность кэшированных данных зависит от сложности векторных данных в экземплярах, от объема измененных данных и от того, включено ли свойство opaqueBackground. При изменении небольших регионов разница между использованием подложки и векторных данных может оказаться незначительной. Перед развертыванием приложения может быть полезно проверить оба сценария со своей работой. Случаи применения кэширования растровых изображенийНиже приведены типичные сценарии, в которых кэширование растровых изображений может оказаться очень выгодным.
Включение кэширования растровых изображений во всех этих сценариях улучшает способность к реагированию и интерактивность приложения путем оптимизации векторной графики. Кроме того, каждый раз при применении фильтра к экранному объекту cacheAsBitmap автоматически присваивается значение true даже в том случае, если вы явным образом выберете значение false. Если вы удалите все фильтры из экранного объекта, свойству cacheAsBitmap будет назначено последнее из присвоенных значений. Когда не следует применять кэширование растровых изображенийИспользование данной функции при неверных обстоятельствах может негативно сказаться на производительности SWF-файла. При использовании кэширования растровых изображений запомните следующие рекомендации.
Включение кэширования растрового изображенияЧтобы включить кэширование растрового изображения для экранного объекта, свойству cacheAsBitmap необходимо присвоить значение true. mySprite.cacheAsBitmap = true; После присвоения свойству cacheAsBitmap значения true можно заметить, что экранный объект автоматически привязывает свои пикселы к целым значениям координат. В ходе проверки SWF-файла видно, что сложные анимированные векторные изображения визуализируются гораздо быстрее. Подложка (кэшированное растровое изображение) не создается даже в том случае, когда cacheAsBitmap присваивается значение true, при наличии одного или нескольких указанных ниже условий.
Матрицы преобразования кэшированных растровых изображенийВ приложениях AIR для мобильных устройств следует устанавливать свойство cacheAsBitmapMatrix во всех случаях, когда задается свойство cacheAsBitmap. Установка этого свойства позволит применять более широкий набор преобразований для отображаемых объектов без повторной визуализации. mySprite.cacheAsBitmap = true; mySprite.cacheAsBitmapMatrix = new Matrix(); Если установлено свойство матрицы, к отображаемому объекту можно будет применять дополнительное преобразование без повторного кэширования объекта.
Эти преобразования применяются к кэшированному растровому изображению. |
|