Одним из ключевых моментов, необходимых для проведения оптимизации приложения, является понимание того, как среда выполнения платформы Flash Platform выполняет код. Среда выполнения работает циклично, выполняя определенные действия в каждом «кадре». Кадр представляет собой отрезок времени, который определяется частотой кадров для данного приложения. Частоту кадров определяет период времени, выделенный для отображения каждого кадра. Например, при частоте 30 кадров в секунду среда выполнения постарается отобразить каждый кадр в течение одной тридцатой доли секунды.
Начальная частота кадров для приложения задается во время разработки. Задать частоту кадров можно с помощью параметров Adobe® Flash® Builder™ или Flash Professional. Также можно указать начальную частоту кадров в коде. Задать частоту кадров в приложении, использующем только ActionScript, можно, добавив тег метаданных
[SWF(frameRate="24")]
в класс корневого документа. В MXML используйте для тега Application или WindowedApplication атрибут
frameRate
.
Каждый цикл кадра состоит из двух фаз, разделенных на три части: события, событие
enterFrame
и визуализация.
Первая фаза состоит из двух частей (события и событие
enterFrame
), каждое из которых потенциально приводит к вызову кода. В первой части первой фазы поступают и отправляются события среды выполнения. Этими событиями могут быть завершение или ход выполнения асинхронных операций, например при загрузке данных по сети. В число этих событий также входит обработка команд пользователя. После отправки событий среда выполнения выполняет код в зарегистрированных прослушивателях. Если события отсутствуют, среда выполнения ожидает завершения фазы выполнения, не выполняя никаких действий. При отсутствии выполняемых действий среда выполнения никогда не увеличивает частоту кадров. Если событие происходит в других частях цикла выполнения, среда выполнения помещает их в очередь и отправляет в следующем кадре.
Второй частью первой фазы является событие
enterFrame
. Это событие отличается от остальных тем, что оно отправляется только один раз за кадр.
После отправки всех событий начинается фаза визуализации. На этом этапе среда выполнения вычисляет состояние всех видимых элементов и рисует их на экране. Затем этот процесс повторяется (подобно бегу спортсмена вокруг стадиона).
Примечание.
Для событий, включающих свойство
updateAfterEvent
, можно выполнить немедленную визуализацию, не дожидаясь этапа визуализации. Однако избегайте использования свойства
updateAfterEvent
, если из-за него часто возникают проблемы с производительностью.
Проще всего представить, что цикл кадра состоит из двух фаз, равных по продолжительности. В этом случае половина каждого цикла кадра отводится для выполнения обработчиков событий и кода приложения, а половина — для визуализации. Однако на практике зачастую все выглядит иначе. Иногда для выполнения кода приложения требуется больше половины времени кадра, что приводит к увеличению первой части фазы и уменьшению второй части фазы, предназначенной для визуализации. И наоборот, при наличии сложного визуального содержимого, например фильтров и режимов наложения, для выполнения визуализации может потребоваться больше половины времени кадра. Так как фактическая длительность фаз может изменяться, то можно сказать, что цикл кадра «эластичен».
Если для выполнения обеих фаз (выполнение кода и визуализация) одного цикла кадра не хватает, среда выполнения изменяет частоту кадров. Длительность кадра увеличивается, поэтому возникает задержка перехода к следующему кадру. Например, если продолжительность цикла кадра составляет более одной тридцатой секунды, среда выполнения не поддерживает обновление экрана с частотой 30 кадров в секунду. Замедление частоты кадров ощущается в падении производительности. В лучшем случае анимация не будет воспроизводится плавно. В худшем случае приложение зависает, а изображение пропадает.
Дополнительные сведения о выполнении кода средой выполнения на платформе Flash Platform и модели визуализации см. в следующих ресурсах.