Требования к производительности 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 - ваш друг. Это мощный профилировщик, который может сократить время, затрачиваемое на оптимизацию базы кода.