Fundamentalne zagadnienia wykonywania kodu w środowisku wykonawczym

Kluczem do poznania sposobu na zwiększenie wydajności aplikacji jest zrozumienie, w jaki sposób środowisko wykonawcze platformy Flash wykonuje kod. Środowisko wykonawcze działa w pętli, w której niektóre operacje są wykonywane w każdej klatce. W tym przypadku klatka jest blokiem czasu określonego przez liczbę klatek na sekundę charakterystyczną dla danej aplikacji. Ilość czasu przydzielona dla każdej klatki bezpośrednio przekłada się na liczbę klatek na sekundę. Na przykład: jeśli określono liczbę klatek na sekundę równą 30, wówczas środowisko wykonawcze dba o to, aby każda klatka trwała jedną trzydziestą sekundy.

Początkową liczbę klatek na sekundę należy określić podczas tworzenia aplikacji. Liczbę klatek na sekundę można ustawić za pomocą ustawień w programie Adobe® Flash® Builder™ lub Flash Professional. Początkową liczbę klatek na sekundę można również ustawić w kodzie. W celu ustawienia liczby klatek na sekundę w aplikacji wykorzystującej tylko kod ActionScript należy zastosować znacznik metadanych [SWF(frameRate="24")] w głównej klasie dokumentu. W kodzie MXML należy ustawić atrybut frameRate w znaczniku Application lub WindowedApplication.

Każda pętla klatki obejmuje dwie fazy podzielone na trzy części: zdarzenia, zdarzenie enterFrame oraz rendering.

Pierwsza faza obejmuje dwie części (zdarzenia i zdarzenie enterFrame ), z których każde może potencjalnie spowodować wywołanie kodu. W pierwszej części pierwszej fazy zdarzenia środowiska wykonawczego docierają i są wywoływane. Te zdarzenia mogą reprezentować zakończenie lub postęp operacji asynchronicznych, takich jak odpowiedź będąca wynikiem ładowania danych przez sieć. Do tych zdarzeń należą także zdarzenia z danych wprowadzonych przez użytkownika. W miarę wywoływania zdarzeń środowisko wykonawcze wykonuje kod w zarejestrowanych detektorach. Jeśli nie dojdzie do zdarzenia, środowisko wykonawcze będzie oczekiwało na zakończenie tej fazy wykonywania bez wykonania żadnej operacji. Środowisko wykonawcze nigdy nie powoduje zwiększenia liczby klatek na sekundę z powodu braku aktywności. Jeśli w innych częściach cyklu wykonywania będą występowały zdarzenia, wówczas środowisko wykonawcze utworzy kolejkę tych zdarzeń i wywoła je w następnej klatce.

Drugą częścią pierwszej fazy jest zdarzenie enterFrame . To zdarzenie odróżnia się od pozostałych, ponieważ jest zawsze wywoływane jeden raz na klatkę.

Po wywołaniu wszystkich zdarzeń rozpoczyna się faza renderowania pętli klatki. W tym momencie środowisko wykonawcze oblicza stan wszystkich elementów widocznych na ekranie i rysuje je na ekranie. Następnie proces powtarza się, dzięki czemu przypomina biegacza na bieżni stadionu.

Uwaga: W przypadku zdarzeń zawierających właściwość updateAfterEvent można wymusić natychmiastowe renderowanie, zamiast czekać na fazę renderowania. Należy jednak unikać używania właściwości updateAfterEvent , jeśli powoduje ona częste problemy z wydajnością.

Najłatwiej sobie wyobrazić, że każda z tych dwóch faz w pętli klatki trwa tyle samo czasu. W takim przypadku w jednej połowie każdej pętli działają procedury obsługi zdarzeń i działa kod aplikacji, a w drugiej połowie odbywa się renderowanie. Jednak rzeczywistość jest zwykle inna. Czasami wykonanie kodu aplikacji trwa dłużej niż połowa czasu dostępnego w klatce, co powoduje wydłużenie czasu wykonywania i zmniejszenie ilości czasu dostępnego na renderowanie. W innych przypadkach — szczególnie w przypadku złożonych treści wizualnych, takich jak filtry i tryby mieszania, renderowanie trwa dłużej niż pół czasu klatki. Rzeczywista ilość czasu wykonywania poszczególnych faz jest elastyczna, dlatego pętla klatki jest określana jako „elastyczna bieżnia”.

Jeśli łączny czas trwania operacji pętli klatki (wykonanie kodu i renderowanie) jest zbyt długi, wówczas środowisko wykonawcze nie może utrzymać zadanej liczby klatek na sekundę. Klatka zajmuje więcej czasu niż czas przydzielony, dlatego przed wywołaniem następnej klatki dochodzi do opóźnienia. Na przykład, jeśli pętla klatki trwa dłużej niż 1/30 sekundy, środowisko wykonawcze nie będzie w stanie zaktualizować ekranu z szczybkością 30 klatek na sekundę. Gdy liczba klatek na sekundę zmniejsza się, zmniejsza się również zadowolenie użytkownika. W najlepszym przypadku animacja jest odtwarzana w sposób przerywany. W najgorszych przypadkach aplikacja zostanie wstrzymana, a okno staje się puste.

Więcej informacji na temat wykonywania kodu i modelu renderowania w platformie Flash zawierają następujące zasoby: