Каковы основные показатели производительности в AS3 помимо векторов рендеринга?
в ActionScript 3 Использование векторной графики является гарантированным способом нанести огромный ущерб производительности вашего проекта.
С помощью одного Bitmap
для всех графических объектов с помощью .copyPixels()
через BitmapData
объект вместо всей векторной графики даст смешной прирост производительности и имеет важное значение для таких людей, как я разработки игр в Flash.
помимо этого я не совсем уверен, что следующие основные вещи, которые я должен быть таргетинг и попытки оптимизации есть. Я использую много встроенных функций тригонометрии, но они, похоже, не так сильно влияют на это. Я знаю, что есть некоторые библиотеки, которые оптимизируют математику с помощью методов аппроксимации и тому подобного, но до сих пор я не нашел их необходимыми.
есть ли другие массивные известные точки, на которые я должен смотреть? Я больше имею в виду встроенные вещи, которые я должен быть осторожен (например, избегая векторного рендеринга), а не как улучшить мой стиль написания.
1 ответ:
документы, которые я нашел полезными являются:
- оптимизация производительности для платформы Adobe Flash
- ActionScript 3.0 и настройка производительности AVM2 от Gary Grossman
- Создание высокопроизводительных приложений для iPhone от Mike Chambers
некоторые моменты:
выберите соответствующие экранные объекты
один из самые простые советы по оптимизации для ограничения использования памяти-это используйте соответствующий тип display object. Для простых форм, которые не интерактивный, используйте формы объекты. Ибо интерактивные объекты, что не нужна временная шкала, используйте Спрайт объекты. Для анимации, которая использует временная шкала, используйте MovieClip объекты.
использовать
getSize()
для сравнения код
getSize()
возвращает размер в памяти указанного объекта.выберите соответствующие примитивные типы для сохранения памяти
все примитивные типы, кроме строка использовать 4 - 8 байтов в памяти. Один , который представляет собой 64-разрядное значение, выделяется 8 байт на Виртуальная машина ActionScript (AVM), если ей не присвоено значение. Поведение отличается для строки тип. Эталонный код и определите наиболее эффективный объект для задачи.
повторно использовать объекты
оптимизация памяти путем повторного использования объектов и избежать их повторного при вероятный.
использовать пул объектов
повторное использование объектов уменьшает необходимость создания экземпляров объектов, которые могут быть дорогой. Это также уменьшает шансы сборщика мусора бегущий, что может замедлить ваше приложение.
свободный
чтобы убедиться, что объект мусор удалить все ссылки на объект. Выделение памяти, а не объекта удаление, запускает сбор мусора. Попробуйте ограничить мусор сбор проходит путем повторного использования объектов как можно больше. Также устанавливать ссылки на null, когда это возможно, так что сборщик мусора тратить меньше время обработки поиска объектов. Думаю, мусора сбор как страхование, и всегда управлять временем жизни объекта явно, когда это возможно.
установка ссылки на экранный объект в значение null не гарантирует, что объект заморожен. Объект продолжает потреблять циклы ЦП до тех пор, пока он идет сбор мусора.
BitmapData класса включает в себя
dispose()
метод, хотя распоряжаться метод удаляет пиксели из память, ссылка все еще должна быть установлена null, чтобы освободить его полностью.использовать растровые изображения
использование векторов, особенно в больших количествах, резко увеличивает потребность в ресурсах CPU или GPU. Используя рисунки - это хороший способ оптимизировать рендеринг, поскольку для выполнения требуется меньше ресурсов обработки нарисуйте пиксели на экране, чем визуализировать вектор содержание.
избежать фильтров, включая фильтры обработаны через пиксель Бендер
когда фильтр применяется к экранному объекту, среда выполнения создает два растровые изображения в памяти. Использование внешне созданных растровых изображений помогает во время выполнения, чтобы уменьшить загрузку Центрального и графического процессоров.
используйте mipmapping для масштабирования больших изображений
используйте mipmapping экономно. Хотя это улучшает качество уменьшенные растровые изображения, это оказывает влияние на пропускную способность, память и скорость.
используйте текстовый движок для текста только для чтения,
TextField
для ввода текстадля текста только для чтения лучше всего использовать Flash Text Engine, которым обеспечивает низкое использование памяти и лучшую визуализацию. Для ввода текста, текст объекты являются лучшим выбором, потому что меньше кода ActionScript требуется создать типовой поведения, такие как обработка ввода и перенос по словам.
использовать обратные вызовы вместо событий
использование собственной модели событий может быть медленнее и потреблять больше памяти чем использование традиционной функции обратного вызова. Объекты событий должны быть создается и выделяется в памяти, что создает замедление производительности. Например, при прослушивании
Event.ENTER_FRAME
событие, новый объект события создается на каждом кадре для обработчик событий. Производительность может быть особенно низкой для экранных объектов, из-за захват и пузырящиеся фазы, которые могут быть дорогими, если дисплей список сложный.замораживание и размораживание объектов на добавленной / удаленной стадии
даже если экранных объектов больше нет в списке отображения и они ожидая сбора мусора, они все еще могут использовать Код ЦП.
концепция замораживание также важно при загрузке удаленного контента с классом загрузчика.
unloadAndStop()
метод позволяет выгрузить SWF-файл, автоматически заморозить каждый объект в загруженном SWF-файле и принудительно сборщик мусора для запуска.использовать
Event.ACTIVATE
иEvent.DEACTIVATE
события для обнаружения фоновой неактивности
Event.ACTIVATE
иEvent.DEACTIVATE
мероприятия позволяют обнаруживать когда среда выполнения получает или теряет фокус. В результате код может быть оптимизирован для реагирования на изменения контекста.события активации и деактивации позволяют реализовать аналогичное механизм для функции "пауза и возобновление" иногда встречается на мобильном телефоне устройства и нетбуки.
отключить взаимодействие мыши, когда это возможно
обнаружение взаимодействия мыши может быть интенсивным процессором, когда многие интерактивные объекты отображаются на экране, особенно если они пересекаются. Когда возможно, рассмотрите возможность отключения взаимодействия с мышью, что поможет вам применение для использования меньше обработки ЦП, и в результате, уменьшить использование батареи на мобильных устройствах.
используйте таймеры для не анимированного контента
таймеры предпочтительнее
Event.ENTER_FRAME
события для не анимированных контент, который выполняется в течение длительного времени.таймер может вести себя в похожий способ на
Event.ENTER_FRAME
событие, но событие может быть отправлено без привязки к частоте кадров. Этот поведение может предложить некоторую значительную оптимизацию. Рассмотрим видео приложение в качестве примера. В этом случае вам не нужно использовать высокая частота кадров, потому что только элементы управления приложения перемещаются.ограничение tweening
ограничить использование анимации, которая позволяет снизить загрузку ЦП, памяти, и срок службы батареи помощь в ускорении работы контента на низкоуровневых устройствах.
использовать
Vector
иArray
The вектор класс позволяет быстрее читать и писать доступ, чем Array класс.
доступ к элементу массива и итерация намного быстрее при использовании вектора экземпляр, чем при использовании массива.
в строгом режиме компилятор может определить тип данных ошибки.
проверка диапазона времени выполнения (или проверка фиксированной длины) увеличивается надежность значительно выше массивов.
используйте API рисования для более быстрого выполнения кода
уменьшить количество выполнения кода с помощью
drawPath()
,drawGraphicsData()
,drawTriangles()
меньше строк код может обеспечить лучшее выполнение ActionScript спектакль.используйте захват событий и пузырьков для минимизации обработчиков событий
использование преимуществ пузырящегося события может помочь вам оптимизировать Время выполнения кода ActionScript. Вы можете зарегистрировать обработчик событий один объект вместо нескольких объектов для повышения производительности.
рисовать пиксели с помощью
setVector()
методпри рисовании пикселей, некоторые простые оптимизации могут быть сделаны просто используя соответствующие методы класса BitmapData. Быстрый способ краска пикселей является использование
setVector()
метод.
lock()
иunlock()
BitmapData
при использовании медленных методов, какsetPixel()
илиsetPixel32()
вызов
lock()
иunlock()
предотвращает обновление экрана излишне. Методы, которые повторяют над пикселями, такими какgetPixel()
,getPixel32()
,setPixel()
иsetPixel32()
, скорее всего, будет медленно, особенно на мобильных устройствах. Если возможно, используйте методы, которые извлекают все пиксели в одном вызове. Для чтения пикселей, используйтеgetVector()
метод, который быстрее, чемgetPixels()
метод. Кроме того, не забудьте используйте API, которые полагаются на векторные объекты, когда это возможно, как они есть скорее всего бежать быстрее.использовать
String
методы класса вместо регулярных выраженийКогда a строка метод класса доступен, он работает быстрее, чем эквивалентное регулярное выражение и не требует создания другой объект.
для текстовых полей используйте
apendText()
вместо+=
операториспользование
appendText()
способ обеспечивает повышение производительности.оператор квадратные скобки
[]
может снизить производительность-хранить ссылку в локальной переменнойиспользование оператора квадратной скобки может замедлить производительность. Вы можете избегайте его использования, сохраняя ссылку в локальной переменной.
уменьшить количество вызовов функций путем перемещения кода inline
вызывая функции могут быть дорогими. Попробуйте уменьшить количество вызовы функций путем перемещения кода в строку.
перемещение вызова функции inline приводит к коду, который больше четырех в разы быстрее.
избегайте размещения контента на сцене
даже если на сцене элементы не отображаются на экране и не оказанные, они все еще существуют в списке отображения. Этот время выполнения продолжается чтобы выполнить внутренние тесты для этих элементов, убедитесь, что они все еще вне сцены, и пользователь не взаимодействует с ними.
избегайте использования
alpha
свойствакогда экранный объект использует Альфа смешивание, среда выполнения должна объединяться значения цвета каждого сложенного экранного объекта и фона цвет для определения окончательного цвета. Таким образом, Альфа-смешивание может быть больше процессор-интенсивнее, чем рисование непрозрачного цвета. Это лишнее вычисления могут снизить производительность на медленных устройствах.
используйте минимально возможную частоту кадров
более высокая частота кадров расходует больше циклов процессора и энергии от батарея чем более низкий тариф.
использовать кэширование для сложных векторное содержание
эта функция кэширует векторный объект, отображает его в виде растрового изображения внутренне, и использует это растровое изображение для рендеринга. Кэширование растровых изображений улучшает отрисовку, если кэшированное содержимое не поворачивается, не масштабируется или меняется на каждом кадре. Любое преобразование, кроме перевода на оси x и y, рендеринг не улучшен.
Set
cacheAsBitmapMatrix
собственность при использовании кэширования растровых изображений в мобильные кондиционеры приложения
cacheAsBitmapMatrix
в профиле AIR mobile вы можете применить любой двумерное преобразование к объекту без регенерации кэшированное растровое изображение. Вы также можете изменить свойство alpha без регенерация кэшированного растрового изображения.использовать
BitmapData
класс для создания пользовательского поведения кэширования растровых изображенийиспользование только одного кэшированного растрового изображения в памяти и является общим для всех экземпляры.
изолировать события, такие как
Event.ENTER_FRAME
в одном обработчикеэтот метод экономит ресурсы процессора.
используйте функцию кэширования растровых изображений и
opaqueBackground
свойство для повышения производительности рендеринга текстафункция кэширования растровых изображений позволяет кэшировать векторное содержимое как растровые изображения для повышения производительности рендеринга. Эта функция полезна для сложный векторный контент, а также при использовании с текстовым контентом, который требует обработки, которые должны быть оказаны.
Альфа-прозрачность создает дополнительную нагрузку на время рисование прозрачных растровых изображений. Вы можете использовать
opaqueBackground
свойство, чтобы обойти это, указав a цвет как фон.включить ускорение аппаратной графики GPU
для того, чтобы использовать GPU ускорение содержания вспышки с воздухом для мобильные платформы, Adobe рекомендует использовать renderMode= "direct" (то есть Stage3D), а не renderMode="gpu". Компания Adobe официально поддерживает и рекомендует следующее Stage3D рамки на основе : Старлинг (2D) и Away3D (3D).
избегайте использования wmode=прозрачный или wmode=непрозрачный в HTML вставить параметры. Эти режимы могут привести к снижение производительности. Они могут также приведите к небольшой потере в аудио-видео синхронизации в обоих программно-аппаратный рендеринг. Кроме того, многие платформы не поддержка рендеринга GPU, когда эти режимы действуют, значительно ухудшение производительности.
предпочтение использования асинхронных версий операций
код приложения в текущем потоке выполнения продолжает выполняться.
асинхронный операции запланированы и разделены, чтобы избежать визуализации проблемы. Следовательно, гораздо проще иметь отзывчивый приложение, использующее асинхронные версии операций. Смотрите воспринимается производительность по сравнению с фактической производительностью для получения дополнительной информации.
гладкие формы для улучшения рендеринга
в отличие от растровых изображений, отрисовка векторных контента требует много вычислений, специально для градиенты и сложные пути, содержащие много элементов управления точки. Как дизайнер или разработчик, убедитесь, что формы достаточно оптимизирован.
кэшировать активы локально после их загрузки, а не загружать их из сети каждый раз, когда они необходимы
если ваше приложение загружает ресурсы, такие как носители или данные, кэшируйте активы, сохраняя их на локальном устройстве. Для активов, которые изменяются нечасто, рассмотрите возможность обновления кэш через определенные промежутки времени.
использовать
StageVideo
класс, чтобы воспользоваться аппаратным ускорениемиспользовать StageVideo класс, чтобы воспользоваться аппаратным ускорением настоящее видео.
этот подход использует все преимущества базового видеооборудования. Результатом является гораздо более низкая нагрузка на процессор, что приводит к более высокие частоты кадров на менее мощных устройствах, а также меньше память использование.
аудиоформат AAC обеспечивает лучшее качество и меньший размер файла, чем формат mp3 с эквивалентной скоростью передачи
подобно декодированию видео, декодирование аудио требует высоких циклов процессора и может быть оптимизирован путем использования доступного оборудования на устройстве.
формат AAC дает лучшее качество и меньший размер файла, чем формате mp3 на равноценную скорость передачи данных.
минимизировать код в конструкторах
функция инициализации, например конструкторы интерпретируются, все остальное-Джит.