Вопросы производительности Flex - PullRequest
13 голосов
/ 05 марта 2011

Какие основные ключевые моменты должен помнить разработчик Flex для повышения производительности приложений Flex?Вот что мне приходит в голову:

  1. расширение ItemRenderers из более легких базовых классов: например, UIComponent
  2. с использованием для suspendBackgroundProcessing значения true для анимаций
  3. с использованием ArrayLists вместоArrayCollections, где это уместно.
  4. useVirtualLayout в Spark DataGroups (к сожалению, на этом шаге для эффективной работы этого совета необходимы скроллеры)
  5. Оптимизация производительности SQLight для приложений AIR (транзакции и т. Д.)
  6. Возможно, разделение длительной обработки данных наразные кадры?(Тем не менее, никогда не делал этого, так что я могу ошибаться)

Каким основным принципам вы пытаетесь следовать при разработке приложений Flex3 / Flex4 / AIR для повышения их производительности?

Ответы [ 4 ]

7 голосов
/ 05 марта 2011

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

Кроме того, я второй комментарий @Wade Mueller о том, как можно больше избегать вложенных контейнеров.

6 голосов
/ 05 марта 2011

Мой список:

  • максимально использовать локальные переменные вместо глобальных
  • ActionScript вместо MXML в максимально возможной степени
  • [Bindable] генерирует тонны кода, старайтесь избегать его

P.S. Автор, а ты русский язык знаешь? :)

6 голосов
/ 05 марта 2011

Хотя это менее важно для групп Spark с меньшим весом, я всегда стараюсь сводить количество вложенных контейнеров к минимуму и по возможности устанавливаю явные позиции / размеры.Сложные пользовательские интерфейсы с контейнерами динамического размера, вложенными друг в друга, вызывают тонну (обычно ненужную) измерений.Это часто приводит к огромным задержкам при переключении между представлениями.

1 голос
/ 05 июня 2013

Основные вещи, которые я рассматриваю, в порядке важности:

  1. Binding

    • Создает много дополнительного кода и может привести к серьезному снижению производительности, если не удалить привязки. Например, если вы повторно используете компоненты в приложениях, функции прослушивания активны во всем потоке вашего приложения, потребляя ненужные циклы памяти и ЦП. Для более крупных приложений рассмотрите класс BindingUtils .

    • Обратите внимание, что вы не можете отменить привязку свойств, связанных фигурными скобками {myVariable}

  2. Проверка (аннулирование) вызовов - это одни из самых дорогих вызовов во Flex. Будьте осторожны при их использовании.

    validateNow();

  3. Понимание жизненного цикла компонента Flex . Переопределение этих методов может упростить процесс создания экземпляра.

  4. Использовать векторные объекты. Дополнительная информация .

  5. Ints> Numbers. Отлично, так что ответ .

Еще несколько простых советов:

  1. Не используйте дорогостоящие операции в циклах.

    for(var i:int = 0; i < massiveArray.length; i++)
    

    В случае massiveArray очень большой массив length () может быть дорогостоящей операцией. Назначьте var massiveArrayLength:int = massiveArray.length; для улучшения производительности.

  2. http://jacksondunstan.com/ содержит множество статей по оптимизации вашего кода. Человек гений.

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

    function getComplexValue():int {
        var i:int = complexCalculation(); // returns int after calculating
        return i;
    }
    

    Вместо этого просто немедленно вернитесь.

    function getComplexValue():int {
        return complexCalculation();
    }
    
  4. Если у вас есть доступ к нему, перспектива Flash Profile - ваш друг. Это мощный профилировщик, который может сократить время, затрачиваемое на оптимизацию кодовой базы.

...