Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

Документы, которые я нашел полезными:

Некоторые основные моменты:

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

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

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

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

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

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

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

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

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

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

Свободная память

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

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

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

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

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

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

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

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

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

Использовать текстовый движок для текста, доступного только для чтения, TextField для ввода текста

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ограничение анимации

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

Использовать Vector против Array

Класс Vector позволяет быстрее читать и писать, чем Arrayкласс.

Доступ и итерация элементов массива намного быстрее при использовании Vector чем они используются при использовании массива.

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

Проверка диапазона продолжительности (или проверка фиксированной длины) увеличивается надежность над массивами.

Использовать API рисования для более быстрого выполнения кода

Уменьшить количество выполнения кода с помощью drawPath(), drawGraphicsData(), drawTriangles() Меньше строк код может обеспечить лучшую производительность выполнения ActionScript.

Использовать захват событий и барботирование для минимизации обработчиков событий

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

Нарисуйте пиксели с помощью метода setVector()

При рисовании пикселей некоторые простые оптимизации могут быть сделаны как раз используя соответствующие методы класса BitmapData. Быстрый способ красками является использование метода setVector().

lock() и unlock() BitmapData при использовании медленных методов, таких как setPixel() или setPixel32()

Вызов lock() и unlock() предотвращает экран не обновляется без необходимости. Методы, которые повторяются по пикселям, например getPixel(), getPixel32(), setPixel() и setPixel32(), вероятно, будут медленными, особенно на мобильных устройствах. Если возможно, используйте методы, которые извлекают все пиксели в одном вызове. Для чтения пикселей используйте getVector(). метод, который быстрее, чем метод getPixels(). Кроме того, не забудьте использовать API, которые полагаются на объекты Vector, когда это возможно, поскольку они скорее всего, будет работать быстрее.

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

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

Для TextField используйте apendText() вместо оператора +=

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

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

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

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

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

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

Избегать размещения контента вне сцены

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

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

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

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

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

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

Использовать кеширование растрового изображения для комплексного векторного контента

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

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

cacheAsBitmapMatrix в профиле мобильного телефона AIR вы можете применить любые двумерное преобразование объекта без регенерации кэшированное растровое изображение. Вы также можете изменить свойство alpha без регенерация кэшированного растрового изображения.

Используйте класс BitmapData для создания пользовательского поведения кэширования растрового изображения

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

Изолировать события, такие как Event.ENTER_FRAME в одном обработчике

Этот метод экономит ресурсы ЦП.

Используйте функцию кеширования растрового изображения и свойство opaqueBackground для улучшения производительности рендеринга текста

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

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

Включить графическое ускорение графического процессора

Чтобы использовать ускорение GPU для Flash-контента с AIR для мобильных платформах, Adobe рекомендует использовать renderMode = "direct" (то есть Stage3D), а не renderMode = "gpu". Официально Adobe поддерживает и рекомендует следующие Stage3D основы: Starling (2D) и Away3D (3D).

Избегайте использования wmode = transparent или wmode = opaque в HTML-встраивании параметры. Эти режимы могут привести к снижению производительности. Они могут также приводят к небольшой потере синхронизации аудио-видео в обоих программного и аппаратного обеспечения. Кроме того, многие платформы не поддержка GPU рендеринга, когда эти режимы действуют, значительно ухудшая производительность.

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

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

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

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

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

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

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

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

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

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

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

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

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

Свернуть код в конструкторах

Инициализация, такая как конструкторы, интерпретируется, все остальное - JIT.