Рендеринг Flash: советы и рекомендации по оптимизации

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

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

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

Последовательность анимации:

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

Делайте анимированные объекты как можно меньше:

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

cacheAsBitmap = true:

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

Уничтожьте все, чем вы не пользуетесь:

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

[UX] Категории и настройки внешнего вида Flash-сообщений
[UX] Категории и настройки внешнего вида Flash-сообщений
Flash-сообщение - это обычный веб-элемент, используемый для отправки короткого сообщения пользователю. Например, на странице входа в систему может...
5
0
8 269
9

Ответы 9

Альфа-прозрачность может быть сложной для рендеринга ...

Из того, что я слышал, фильтр свечения нанесет серьезный ущерб, если вы его оживите.

По возможности используйте visible = false вместо alpha = 0.

Flash (8 - ActionScript 2 или ниже) будет отображать клип, даже если для его видимости установлено значение false - чтобы остановить его рендеринг, вам нужно переместить его с «видимого» экрана (т.е. x = -2000, при условии, что ширина клипа равна менее 2000).

Интересно ... черт возьми, это похоже на взлом, есть ли другой способ заставить Flash Player что-то не отображать?

onekidney 01.10.2008 01:48

да, это довольно мерзко

Kasper 01.10.2008 02:39

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

grapefrukt 01.10.2008 10:38

Это взлом и требуется только для ActionScript 2 или ниже - обновите ответ соответственно.

Max Stewart 04.10.2008 16:25

Используйте cacheAsBitmap = true: только в том случае, если вы не анимируете преобразование Sprite / MovieClip (например, масштабирование / вращение и т. д.), Иначе это действительно замедлит его.

По возможности используйте PNG вместо векторных фигур.

Еще одно соображение - какой движок анимации вы используете. Если вы используете тот, который поставляется с Flash, вы, вероятно, получите некоторую производительность, переключившись на что-то вроде TweenLite (есть еще несколько хороших).

Имейте в виду, что cacheAsBitmap может быть очень опасным. Если вы масштабируете, вращаете или обновляете сам клип (например, изменяете альфа-канал чего-то внутри него), flash должен будет создать новый снимок, который все замедлит. Пока вы перемещаете клипы по осям x и y, хорошо, чтобы они всегда были включены (если вам нужно повернуть, выключите его, а затем снова включите, когда закончите). Также обратите внимание, что если вы используете фильтры, cacheAsBitmap is всегда автоматически включен -> может быть медленным.

Будьте проще,

Flash отображает графику как вектор (и очень хорошо). Чем сложнее объект, тем больше времени потребуется на рендеринг.

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

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

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

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

Большие фрагменты текста, если они не изменяются, часто можно заменить растровым изображением (или прозрачным PNG). Это затрудняет обслуживание контента, но может повлиять на производительность существенный. (Примечание: это в основном относится к встроенным шрифтам, особенно изогнутым, таким как азиатские шрифты, поскольку такие шрифты отображаются в виде векторных фигур. Шрифты устройств обрабатываются ОС и несут гораздо меньше накладных расходов.)

Профиль, профиль, профиль.

Если сценарии работают медленно, начните отслеживать отчеты о времени, чтобы выяснить, какой класс, какая функция, какой цикл, какой оператор замедляет вас. Если графические эффекты замедляют вас, проследите подробные отчеты о времени FPS и начните настройку. Ускоряется ли при удалении того или иного слоя? Или когда вы измените этот клип, чтобы он не был прозрачным? И так далее. Изолируйте то, что медленно, прежде чем пытаться это исправить.

Простое копание и рефакторинг редко дает реальное улучшение производительности.

Другие вопросы по теме