Требования к производительности Flex
Каковы основные ключевые моменты, которые разработчик Flex должен запомнить, чтобы повысить производительность приложений Flex?
Мне приходят в голову:
- расширение ItemRenderers из более легких базовых классов: i. UIComponent
- использование suspendBackgroundProcessing для true для анимаций
- используя ArrayLists вместо ArrayCollections, где это необходимо.
- useVirtualLayout в Spark DataGroups (к сожалению, для этого шага требуется, чтобы Scrollers использовали этот совет)
- Оптимизация производительности SQLight для приложений AIR (транзакции и т.д.)
- Вероятно, разделение длительной обработки данных на разные кадры? (Никогда не делал этого, так что я мог ошибаться)
Каковы основные рекомендации, которые вы пытаетесь выполнить при разработке приложений Flex3/Flex4/AIR, чтобы повысить их производительность?
Ответы
Ответ 1
Мне кажется, что у многих людей есть проблемы с производительностью с помощью itemRenderers. Итак, мой единственный вклад здесь, чтобы никогда не использовать привязку itemRenderer. Я исправляю множество ошибок "утечки памяти", просто переписывая их itemRenderers, чтобы использовать событие dataChange вместо привязки.
Кроме того, я второй комментарий @Wade Mueller о том, чтобы избегать вложенных контейнеров в максимально возможной степени.
Ответ 2
Несмотря на то, что это менее важно для групп Spark с более легким весом, я всегда стараюсь свести количество вложенных контейнеров к минимуму и, если возможно, установить явные позиции/размеры. Сложные пользовательские интерфейсы с контейнерами с динамическим размером, вложенные друг в друга, вызывают тонну (как правило, ненужное) измерения, которое должно произойти. Это часто приводит к огромным задержкам при переключении между представлениями.
Ответ 3
Мой список:
- максимально использовать локальные вары, а не глобальные
- ActionScript вместо MXML как можно больше
- [Bindable] генерирует тонны кода, старайтесь избегать этого.
P.S. Автор, а ты русский язык знаешь?:)
Ответ 4
Основные вещи, которые я считаю в порядке важности:
-
Привязка
-
Создает много дополнительного кода и может привести к серьезному ухудшению производительности, когда привязки не удаляются. Например, если вы повторно используете компоненты в приложениях, функции прослушивания активны во всем потоке вашего приложения, потребляя ненужную память и циклы процессора. Для более крупных приложений рассмотрим класс BindingUtils.
-
Обратите внимание, что вы не можете отменить привязки свойств с фигурными фигурными скобками {myVariable}
-
Подтвердить (invalidate) вызовы - одни из самых дорогих звонков в Flex. Будьте осторожны при их использовании.
validateNow();
-
Понимать Flex жизненный цикл компонента. Переопределение этих методов может упростить процесс создания экземпляра.
-
Используйте векторные объекты. Дополнительная информация.
- Инты > Числа. Отличный SO ответ.
Некоторые более простые советы:
-
Не используйте дорогие операции в циклах.
for(var i:int = 0; i < massiveArray.length; i++)
В случае massiveArray
очень большой массив length() может быть дорогостоящей операцией. Назначьте var massiveArrayLength:int = massiveArray.length;
для повышения производительности.
-
http://jacksondunstan.com/ содержит множество статей по оптимизации вашего кода. Человек - гений.
-
Избегайте создания ненужных переменных, поскольку создание экземпляров стоит дорого. Всегда используйте переменные, если это возможно.
function getComplexValue():int {
var i:int = complexCalculation(); // returns int after calculating
return i;
}
Вместо этого немедленно вернитесь.
function getComplexValue():int {
return complexCalculation();
}
-
Если у вас есть доступ к нему, перспектива Flash Profile - ваш друг. Это мощный профилировщик, который может сократить время, затрачиваемое на оптимизацию базы кода.