Документы, которые я нашел полезными:
Некоторые основные моменты:
Одним из самых простых советов по оптимизации для ограничения использования памяти является использование соответствующего типа экранного объекта .Для простых неинтерактивных фигур используйте объекты Shape .Для интерактивных объектов , которые не нуждаются во временной шкале, используйте Sprite объекты.Для анимации, использующей временную шкалу, используйте MovieClip объекты.
getSize()
возвращает размер в памяти указанного объекта.
Все примитивытипы, кроме String используют 4 - 8 байтов в памяти. Number , представляющее 64-разрядное значение, выделяется 8 байтов виртуальной машиной ActionScript (AVM), если ему не присвоено значение.Поведение отличается для типа String.Оцените код и определите наиболее эффективный объект для задачи.
Оптимизация памяти за счет повторного использования объектов и избегания их повторного создания при любой возможности.
Повторное использование объектов уменьшает необходимость создания экземпляров объектов, что может быть дорогостоящим.Это также снижает вероятность запуска сборщика мусора, что может замедлить работу приложения.
Чтобы убедиться, что объектis сборщик мусора , удалите все ссылки на объект.Распределение памяти, а не удаление объекта, запускает сборку мусора.Постарайтесь ограничить количество проходов сборки мусора, максимально используя объекты.Кроме того, когда это возможно, установите ссылки на null, чтобы сборщик мусора тратил меньше времени на поиск объектов.Думайте о сборке мусора как о страховке и всегда управляйте временем жизни объекта, когда это возможно.
Установка нулевой ссылки на экранный объект не гарантирует, что объект заморожен.Объект продолжает потреблять циклы ЦП, пока не будет собран мусор.
Класс BitmapData включает в себя метод dispose()
, хотя метод dispose удаляет пиксели из памяти,для полного освобождения ссылки по-прежнему необходимо установить значение NULL.
Использование векторов, особенно в больших количествах, значительно увеличивает потребностьдля ресурсов процессора или графического процессора.Использование битовых карт - это хороший способ оптимизировать рендеринг, поскольку среде выполнения требуется меньше ресурсов обработки для рисования пикселей на экране, чем для рендеринга векторного содержимого.
Когда фильтр применяется к экранному объекту, среда выполнения создает две битовые карты в памяти.Использование созданных извне растровых изображений помогает среде выполнения снизить нагрузку на процессор или графический процессор.
Использовать mipmapping экономно.Хотя это улучшает качество уменьшенных растровых изображений, оно влияет на пропускную способность, память и скорость.
Для текста только для чтения лучше всего использовать Flash Text Engine , который предлагает низкое использование памяти и лучший рендеринг.Для ввода текста объекты TextField являются лучшим выбором, потому что меньше кода ActionScriptтребуется для создания типичных поведений, таких как обработка ввода и перенос слов.
Использование собственной модели событий можетбыть медленнее и потреблять больше памяти, чем при использовании традиционной функции обратного вызова.Объекты событий должны быть созданы и размещены в памяти, что создает снижение производительности.Например, при прослушивании события Event.ENTER_FRAME
новый объект события создается в каждом кадре для обработчика события.Производительность может быть особенно низкой для экранных объектов из-за фаз захвата и всплытия, которые могут быть дорогими, если список отображения является сложным.
Даже если экранные объекты больше не отображаются в списке отображения и ожидают сбора мусора, они все равно могут использовать код, интенсивно использующий ЦП.
КонцепцияЗамораживание также важно при загрузке удаленного контента с помощью класса Loader.
unloadAndStop()
метод позволяет выгрузить SWF-файл, автоматически заморозить каждый объект в загруженном SWF-файле и принудительно вызватьсборщик мусора для запуска.
Event.ACTIVATE
* 1170События * и Event.DEACTIVATE
позволяют определить, когда среда выполнения получает или теряет фокус.В результате код можно оптимизировать для реагирования на изменения контекста.
События активации и деактивации позволяют реализовать механизм, аналогичный функции «Пауза и возобновление», которая иногда встречается на мобильных устройствах и нетбуках.
Обнаружение взаимодействия с мышью может потребовать много ресурсов процессора, когда на экране отображается много интерактивных объектов, особенно если они перекрываются.Когда это возможно, рассмотрите возможность отключения взаимодействия с мышью, что поможет вашему приложению использовать меньше ресурсов процессора и, как следствие, сократить использование батареи на мобильных устройствах.
Таймеры предпочтительнее, чем Event.ENTER_FRAME
события для неанимированного контента, который выполняется долгое время.
Таймер может вести себя аналогично Event.ENTER_FRAME
событие, но событие может быть отправлено без привязки к частоте кадров.Такое поведение может предложить значительную оптимизацию.Рассмотрим приложение видеоплеера в качестве примера.В этом случае вам не нужно использовать высокую частоту кадров, потому что движутся только элементы управления приложения.
Ограничениеиспользование анимации движения, которая экономит ресурсы процессора, памяти и время автономной работы, помогая контенту работать быстрее на устройствах низкого уровня.
Класс Vector обеспечивает более быстрый доступ для чтения и записи, чем класс Array .
Доступ к элементам массива и итерации намного быстрее при использованииэкземпляр вектора, чем при использовании массива.
В строгом режиме компилятор может выявлять ошибки типов данных.
Проверка диапазона времени выполнения (или проверка фиксированной длины) значительно повышает надежность по сравнению с массивами.
Сокращение объема выполнения кода с использованием drawPath()
, drawGraphicsData()
, drawTriangles()
Меньше строк кода может обеспечитьлучшая производительность выполнения ActionScript.
Использование преимуществ всплывающих событий может помочь вамоптимизировать время выполнения кода ActionScript.Вы можете зарегистрировать обработчик событий для одного объекта вместо нескольких, чтобы повысить производительность.
При рисовании пикселей можно выполнить некоторые простые оптимизации, просто используя соответствующие методы класса BitmapData.Быстрый способ рисования пикселей - использовать метод setVector()
.
Вызов lock()
и unlock()
предотвращает ненужное обновление экрана.Методы, которые выполняют итерации по пикселям, такие как getPixel()
, getPixel32()
, setPixel()
и setPixel32()
,может быть медленным, особенно на мобильных устройствах.Если возможно, используйте методы, которые получают все пиксели за один вызов.Для чтения пикселей используйте метод getVector()
, который быстрее, чем метод getPixels()
.Кроме того, не забывайте использовать API, которые полагаются на объекты Vector, когда это возможно, поскольку они могут работать быстрее.
Когда доступен метод класса String , он работает быстрее, чем эквивалентное регулярное выражение, и не требует создания другого объекта.
Использование метода appendText()
обеспечивает повышение производительности.
Использование оператора квадратной скобки может снизить производительность.Вы можете избежать его использования, сохранив ссылку на локальную переменную.
Вызов функций можетбыть дорогимПопробуйте уменьшить количество вызовов функций, перемещая встроенный код.
Перемещение встроенного вызова функции приводит к увеличению кода в четыре раза.
Даже если элементы вне сцены не отображаются на экране и не отображаются, они все еще существуют в списке отображения.Среда выполнения продолжает выполнять внутренние тесты на этих элементах, чтобы убедиться, что они все еще находятся вне сцены и пользователь не взаимодействует с ними.
Когда экранный объект использует смешивание alpha , среда выполнения должна объединить значения цвета каждого сложенного экранного объекта и цвет фона, чтобы определить окончательный цвет.Таким образом, альфа-смешение может быть более ресурсоемким, чем рисование непрозрачного цвета.Это дополнительное вычисление может снизить производительность на медленных устройствах.
Более высокая частота кадров увеличивает количество циклов ЦП и энергии отбатареи ниже, чем скорость.
Основы выполнения кода во время выполнения
Эта функция кэширует векторный объект, внутренне отображает его как растровое изображение и использует его для визуализации.Кэширование растровых изображений улучшает рендеринг, если кэшированный контент не поворачивается, не масштабируется или не изменяется в каждом кадре.При любом преобразовании, кроме преобразования по осям X и Y, рендеринг не улучшается.
cacheAsBitmapMatrix
в мобильном профиле AIR вы можете применить любое двумерное преобразование к объекту без регенерации кэшированного растрового изображения.Вы также можете изменить альфа-свойство, не восстанавливая кэшированное растровое изображение.
Использование только одного кэшированного растрового изображения используется в памяти и используется всеми
экземпляры.
Этот метод экономит ресурсы процессора.
Функция кэширования растрового изображения позволяет кэшировать векторный контент как
растровые изображения для улучшения производительности рендеринга. Эта функция полезна для
сложный векторный контент, а также при использовании с текстовым контентом, который
требует обработки для обработки.
Альфа-прозрачность накладывает дополнительное бремя на время выполнения, когда
рисование прозрачных растровых изображений. Вы можете использовать
opaqueBackground
свойство, чтобы обойти это, указав
цвет в качестве фона.
Чтобы использовать ускорение графического процессора для Flash-содержимого с помощью AIR для
для мобильных платформ Adobe рекомендует использовать renderMode = "direct"
(то есть Stage3D), а не renderMode = "gpu". Adobe официально
поддерживает и рекомендует следующие Stage3D платформы:
Старлинг (2D) и Away3D (3D) .
Избегайте использования wmode = прозрачный или wmode = непрозрачный в HTML-коде
параметры. Эти режимы могут привести к снижению производительности. Они могут
также приводят к небольшой потере аудио-видео синхронизации в обоих
программно-аппаратный рендеринг. Кроме того, многие платформы не
поддержка рендеринга графического процессора, когда эти режимы действуют, значительно
ухудшение производительности.
Код приложения в текущем потоке выполнения продолжает выполняться.
Асинхронные операции запланированы и разделены, чтобы избежать рендеринга
проблемы. Следовательно, намного легче иметь отзывчивый
приложение, использующее асинхронные версии операций. См воспринимается
производительность против фактической производительности для получения дополнительной информации.
В отличие от растровых изображений, рендеринг векторного содержимого требует много вычислений,
особенно для градиентов и сложных путей, которые содержат много контроля
точки. Как дизайнер или разработчик, убедитесь, что формы
достаточно оптимизирован.
Если ваше приложение загружает ресурсы, такие как медиа или данные, кешируйте
активы, сохраняя их на локальном устройстве. Для активов, которые меняются
нечасто, попробуйте обновлять кеш через определенные промежутки времени.
Используйте класс StageVideo , чтобы воспользоваться преимуществами аппаратного ускорения для
настоящее видео.
Этот подход в полной мере использует базовое видеооборудование.
В результате значительно снижается нагрузка на процессор, что выражается в
более высокая частота кадров на менее мощных устройствах, а также меньше памяти
использование.
Подобно декодированию видео, для декодирования аудио требуются высокие циклы ЦП и
можно оптимизировать, используя доступное оборудование на устройстве.
Формат AAC предлагает лучшее качество и меньший размер файла, чем
формат mp3 с эквивалентным битрейтом.
интерпретируются такие функции инициализации, как конструкторы ,
все остальное JIT.