Grundläggande om exekvering av körtidskod

En viktig del av att förstå hur du kan förbättra programmets prestanda är att känna till hur koden körs på Flash-plattformen. Körtidskoden fungerar i en slinga där vissa åtgärder inträffar i varje ”bildruta”. En bildruta är i det här fallet bara ett block av tid som fastställs av bildrutefrekvensen som angetts för programmet. Mängden tid som tilldelas varje bildruta motsvarar bildrutefrekvensen. Om du t.ex. anger en bildrutefrekvens på 30 bildrutor per sekund kommer körtidsmodulen att försöka göra så att varje bildruta varar i en trettiondels sekund.

Du anger den inledande bildrutefrekvensen för programmet under redigeringen. Du kan ställa in bildrutefrekvensen med inställningarna i Adobe® Flash® Builder™ eller Flash Professional. Du kan även ange den inledande bildrutefrekvensen i koden. Du kan ställa in bildrutefrekvensen i ett program med enbart ActionScript med metadatataggen [SWF(frameRate="24")] i rotdokumentklassen. I MXML ställer du in attributet frameRate i taggen Application eller WindowedApplication.

Varje bildruteslinga består av två faser som delas upp i tre delar: händelser, händelsen enterFrame och återgivning.

Den första fasen består av två delar (händelser och händelsen enterFrame ) som båda kan göra att din kod anropas. Körtidshändelser tas emot och skickas under den första delen av fas 1. Händelserna kan representera slutförande eller förlopp för asynkrona åtgärder, t.ex. svar på inläsning av data över ett nätverk. De kan även inkludera händelser på grund av användarinmatningar. Körtidsmodulen verkställer din kod i avlyssnarna som du har registrerat när händelser skickas. Om inga händelser inträffar, väntar körtidsmodulen på att slutföra körningsfasen utan att utföra en åtgärd. Körtidsmodulen ökar inte bildrutefrekvensen på grund av inaktivitet. Om händelser inträffar under andra delar av körningscykeln, köar körtidsmodulen händelserna och skickar dem i nästa bildruta.

Den andra delen av fas 1 är händelsen enterFrame . Händelsen skiljer sig från de övriga eftersom den alltid skickas en gång per bildruta.

Bildruteslingans återgivningsfas startar när alla händelser har skickats. Då beräknar körtidsmodulen tillståndet för alla synliga element på skärmen och ritar dem på skärmen. Sedan upprepas processen, precis som en löpare som springer runt en bana.

Obs! För händelser som inkluderar en updateAfterEvent -egenskap kan du tvinga att återgivningen sker omedelbart i stället för att återgivningsfasen inväntas. Du bör dock undvika att använda updateAfterEvent eftersom det ofta leder till prestandaproblem.

Det är enklast att tänka sig att de två faserna i bildruteslingan tar lika lång tid. Under halva bildruteslingan körs händelsehanterare och programkod och under den andra halvan sker återgivningen. I verkligheten är det dock ganska annorlunda. Ibland tar programkoden mer än hälften av den tillgängliga tiden i bildrutan och dess tidstilldelning utökas vilket minskar den tillgängliga tiden för återgivning. I andra fall kan återgivningen ta mer än halva bildrutetiden, speciellt när komplicerat visuellt innehåll som filter och blandningslägen används. Eftersom den verkliga tiden för faserna är flexibel, liknas bildruteslingan ofta för en ”elastisk löparbana”.

Om de kombinerade åtgärderna i bildruteslingan (kodkörning och återgivning) tar för lång tid kan körtidsmodulen inte bevara bildrutefrekvensen. Bildrutan expanderar och tar längre än den tilldelade tiden vilket innebär en fördröjning innan nästa bildruta aktiveras. Om t.ex. en bildruteslinga tar längre än en trettiondels sekund kan körtidsmodulen inte uppdatera skärmen med 30 bildrutor per sekund. Upplevelsen försämras när bildrutefrekvensen saktar ned. I bästa fall blir animering ryckig. I värsta fall låser sig programmet och fönstret töms.

Se följande resurser för mer information om verkställande av körtidskod på Flash-plattformen och återgivningsmodellen: