Каковы основные показатели производительности в AS3 помимо векторов рендеринга?

в ActionScript 3 Использование векторной графики является гарантированным способом нанести огромный ущерб производительности вашего проекта.

С помощью одного Bitmap для всей графики с помощью .copyPixels() через BitmapData объект вместо всей векторной графики даст смешное повышение производительности и имеет важное значение для таких людей, как я, разрабатывающих игры в Flash.

помимо этого я не совсем уверен, что следующие основные вещи, которые я должен быть таргетинг и попытка оптимизации. Я использую много встроенных функций тригонометрии, но они, похоже, не сильно влияют на это. Я знаю, что есть некоторые библиотеки, которые оптимизируют математику с помощью методов аппроксимации и подобных, но до сих пор я не нашел их необходимыми.

есть ли другие массивные известные точки, на которые я должен смотреть? Я больше имею в виду встроенные вещи, с которыми я должен быть осторожен (например, избегать векторного рендеринга), а не как улучшить мой стиль написания.

1 ответов


документы, которые я нашел полезными являются:

некоторые моменты:

выберите соответствующие объекты отображения

один из самые простые советы по оптимизации для ограничения использования памяти используйте соответствующий тип показ объектов. Для простых форм, которые не интерактивный, используйте формы объекты. Для интерактивные объекты, что не нужна временная шкала, используйте Спрайт объекты. Для анимации, использующей timeline, используйте MovieClip объекты.

использовать getSize() для сравнения код

getSize() возвращает размер в памяти указанного объекта.

выберите соответствующие примитивные типы для сохранения памяти

все примитивные типы, кроме строка использовать 4 - 8 байтов в памяти. Ля , который представляет 64-разрядное значение, выделяется 8 байтами Виртуальная машина ActionScript (AVM), если ей не присвоено значение. Поведение отличается для строки тип. Эталонный код и определите наиболее эффективный объект для задачи.

повторное использование объектов

оптимизация памяти путем повторного использования объектов и избежать их повторного при вероятный.

использовать пул объектов

повторное использование объектов уменьшает необходимость создания экземпляров объектов, которые могут быть дорогой. Это также уменьшает шансы сборщика мусора бегущий, что может замедлить ваше приложение.

свободный

чтобы убедиться, что объект мусор удалить все ссылки на объект. Выделение памяти, а не объект удаление, запускает сбор мусора. Попробуйте ограничить мусор коллекция проходит путем повторного использования объектов, насколько это возможно. Также устанавливать ссылки на null, когда это возможно, чтобы сборщик мусора тратить меньше время обработки поиска объектов. Думай о мусоре. сбор как страхование, и всегда управлять временем жизни объекта явно, когда это возможно.

установка ссылки на отображаемый объект в значение null не гарантирует, что объект заморожен. Объект продолжает потреблять циклы CPU, пока он идет сбор мусора.

BitmapData класса включает в себя dispose() метод, хотя dispose метод удаляет пиксели из память, ссылка все еще должна быть установлена null, чтобы освободить его полностью.

использовать растровые изображения

используя векторы, особенно в больших количествах, значительно увеличивает потребность в ресурсах CPU или GPU. Используя рисунки хороший способ оптимизировать отрисовка, поскольку среда выполнения требует меньше ресурсов обработки для нарисуйте пиксели на экране, чем визуализировать вектор содержание.

избегайте фильтров, включая фильтры, обработанные через Pixel Bender

когда фильтр применяется к экранному объекту, среда выполнения создает два растровые изображения в памяти. Использование внешних созданных растровых изображений помогает время выполнения для уменьшения загрузки CPU или GPU.

используйте mipmapping для масштабирования больших изображений

используйте mipmapping экономно. Хотя это улучшает качество масштабируемые растровые изображения влияют на пропускную способность, память и скорость.

используйте text Engine для текста только для чтения,TextField для ввода текста

для текста только для чтения лучше всего использовать Flash Text Engine, которым предлагает низкое использование памяти и лучший рендеринг. Для ввода текста, текст объекты-лучший выбор, потому что меньше кода ActionScript требуется создать типовой поведения, такие как обработка входных данных и перенос по словам.

использовать обратные вызовы вместо событий

использование собственной модели событий может быть медленнее и потреблять больше памяти чем использование традиционной функции обратного вызова. Объекты событий должны быть создано и выделено в памяти, что создает замедление производительности. Например, при прослушивании Event.ENTER_FRAME событие, новый объект event создается на каждом кадре для обработчик событий. Представление может быть особенно медленно для объектов дисплея, должных к захват и пузырящиеся фазы, которые могут быть дорогостоящими, если дисплей список сложный.

замораживание и размораживание объектов при добавлении / удалении со сцены

даже если отображаемые объекты больше не находятся в списке отображения и ожидая, когда будет собран мусор, они все еще могут использовать Код ЦП.

концепция замораживание также важно при загрузке удаленного содержимого с классом Loader.

unloadAndStop() метод позволяет выгрузить SWF-файл, автоматически заморозить каждый объект в загруженном SWF-файле и принудительно сборщик мусора для запуска.

использовать Event.ACTIVATE и Event.DEACTIVATE события для обнаружения фоновой неактивности

Event.ACTIVATE и Event.DEACTIVATE мероприятия позволяют обнаруживать когда среда выполнения получает или теряет фокус. В результате код может быть оптимизирован для реагирования на изменения контекста.

события активации и деактивации позволяют реализовать аналогичный механизм для функции "пауза и возобновление" иногда можно найти на мобильном телефоне устройства и нетбуки.

отключить взаимодействие с мышью, когда можно

обнаружение взаимодействия мыши может быть CPU-интенсивным, когда многие интерактивные объекты отображаются на экране, особенно если они пересекаются. Когда возможно, подумайте об отключении взаимодействия с мышью, что поможет вашему применение использовать меньше обработки ЦП, и в результате, уменьшить использование батареи на мобильных устройствах.

используйте таймеры для не анимированного контента

таймеры предпочтительнее Event.ENTER_FRAME события для не анимированных контент, который выполняется в течение длительного времени.

таймер может вести себя в похожий способ на Event.ENTER_FRAME событие, но событие может быть отправлено без привязки к частоте кадров. Этот поведение может предложить некоторую значительную оптимизацию. Рассмотрим видео приложение в качестве примера. В этом случае вам не нужно использовать высокая частота кадров, потому что только элементы управления приложения перемещаются.

ограничение tweening

ограничьте использование tweening, что экономит обработку ЦП, память и срок службы батареи помогает контенту работать быстрее на низкоуровневых устройствах.

использовать Vector и 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 методы класса вместо регулярных выражений

когда строка метод класса доступен, он работает быстрее, чем эквивалентное регулярное выражение и не требует создания другой объект.

для текстовых полей используйте apendText() вместо += оператор

использование appendText() способ обеспечивает повышение производительности.

оператор квадратные скобки [] может замедлить производительность-хранить ссылку в локальной переменной

используя оператора квадратного кронштейна смогите замедлить представление. Вы можете избегайте его использования, сохраняя ссылку в локальной переменной.

уменьшить количество вызовов функций путем перемещения кода inline

вызывающие функции могут быть дорогими. Попробуйте уменьшить количество вызовы функций путем встраивания кода.

перемещение функции вызова встроенных результатов в коде, который составляет более четырех в разы быстрее.

избегайте размещения контента за пределами сцены

даже если элементы off-stage не показаны на экране и не визуализированные, они все еще существуют в списке отображения. Этот выполнения продолжает для выполнения внутренних тестов на эти элементы, чтобы убедиться, что они все еще вне сцены, и пользователь не взаимодействует с ними.

избегайте использования alpha свойства

когда объект отображения использует Альфа смешивание, среда выполнения должна объединяться значения цвета каждого сложенного объекта отображения и фона цвет для определения окончательного цвета. Таким образом, Альфа-смешивание может быть больше процессор-интенсивнее, чем рисование непрозрачного цвета. Это дополнительное вычисление может повредить производительность на медленных устройствах.

используйте минимально возможную частоту кадров

более высокая частота кадров расходует больше циклов процессора и энергии от батарея чем более низкий тариф.

основы выполнения кода выполнения elastic-racetrack

использовать кэширование для сложных векторное содержимое

эта функция кэширует векторный объект, делает его как растровое изображение внутренне и использует это растровое изображение для рендеринга. Кэширование улучшает отрисовку, если кэшированное содержимое не поворачивается, масштабируется или менялся на каждом кадре. Любое преобразование, кроме translation on оси x и y, рендеринг не улучшен.

Set cacheAsBitmapMatrix свойство при использовании кэшированных растровых изображений в mobile AIR приложения

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, когда эти режимы действуют, значительно ухудшение производительности.

Favor использование асинхронных версий операций

код приложения в текущем потоке выполнения выполнение продолжается.

асинхронный операции запланированы и разделены, чтобы избежать рендеринга проблемы. Следовательно, гораздо легче иметь отзывчивый приложение, использующее асинхронные версии операций. См.воспринимается производительность по сравнению с фактической производительностью для получения дополнительной информации.

гладкие формы для улучшения рендеринга

в отличие от растровых изображений, векторное содержимое рендеринга требует многих вычислений, специально для градиенты и сложные пути, содержащие множество элементов управления точки. Как дизайнер или разработчик, убедитесь, что фигуры достаточно оптимизирован.

кэшировать активы локально после их загрузки, а не загружать их из сети каждый раз, когда они необходимы

если приложение загружает ресурсы, такие как носители или данные, кэшируйте активы, сохраняя их на локальном устройстве. Для активов, которые изменяются нечасто, рассмотрите возможность обновления кэширование с интервалами.

использовать StageVideo класс, чтобы воспользоваться аппаратным ускорением

использовать объект stagevideo класс, чтобы воспользоваться аппаратным ускорением для настоящее видео.

этот подход использует все преимущества базового видеооборудования. Результатом является гораздо более низкая нагрузка на CPU, что приводит к более высокая частота кадров на менее мощных устройствах, а также меньше память использование.

аудио формат AAC предлагает лучшее качество и меньший размер файла, чем формат mp3 с эквивалентной скоростью

подобно видео-расшифровывать, аудио расшифровывать требует высоких циклов К. П. У. и можно оптимизировать, используя доступное оборудование на устройстве.

формат AAC дает лучшее качество и меньший размер файла, чем формат mp3 в эквиваленте скорость передачи данных.

минимизировать код в конструкторах

функция инициализации, такая как конструкторы интерпретируются, все остальное-Джит.