Basisprincipes voor het uitvoeren van code in de runtime

Om te begrijpen hoe de prestaties van een toepassing verbeterd kunnen worden, moet u begrijpen hoe code in de runtime van·het Flash-platform wordt uitgevoerd. Tijdens het uitvoeren van code wordt een lusbewerking gemaakt, waarin bepaalde acties in afzonderlijke "frames" worden uitgevoerd. Een frame is in dit geval gewoon een periode die wordt bepaald door de framesnelheid die voor de toepassing is opgegeven. Hoeveel tijd er voor elk frame wordt uitgetrokken is·volledig afhankelijk van de framesnelheid. Als u bijvoorbeeld een framesnelheid van 30 frames per seconde opgeeft, probeert de runtime elk frame een dertigste seconde te laten duren.

De aanvankelijke framesnelheid van de toepassing wordt tijdens het ontwerpen opgegeven. U kunt de framesnelheid opgeven met instellingen in Adobe® Flash® Builder™ of Flash Professional. U kunt de aanvankelijke framesnelheid ook in code opgeven. In een toepassing met alleen ActionScript stelt u de framesnelheid in met·de metatag [SWF(frameRate="24")] in de hoofddocumentklasse. In MXML stelt u het kenmerk frameRate in de tag Application of WindowedApplication in.

Elke framelusbewerking bestaat uit twee fasen en is onderverdeeld in drie onderdelen: gebeurtenissen, de gebeurtenis enterFrame en rendering.

De eerste fase bevat twee onderdelen (gebeurtenissen en de gebeurtenis enterFrame ), die er allebei toe kunnen leiden dat uw code wordt aangeroepen. In het eerste onderdeel van de eerste fase arriveren runtimegebeurtenissen en worden deze verzonden. Deze gebeurtenissen kunnen een weerspiegeling zijn van de voltooiing of voortgang van asynchrone bewerkingen, zoals een antwoord op het laden van gegevens via een netwerk of gebeurtenissen naar aanleiding van invoer van de gebruiker. Wanneer gebeurtenissen worden verzonden, voert de runtime·de code uit in listeners die door u zijn geregistreerd. Als er geen gebeurtenissen plaatsvinden, wacht de runtime totdat deze fase kan worden voltooid, zonder acties uit te voeren. De framesnelheid wordt nooit door de runtime verhoogd als er geen activiteit plaatsvindt. Als er gebeurtenissen plaatsvinden tijdens de andere onderdelen van de uitvoeringscyclus, worden deze gebeurtenissen in een wachtrij geplaatst en in het volgende frame verzonden.

Het tweede onderdeel van de eerste fase is de gebeurtenis enterFrame . Deze gebeurtenis wijkt af van andere gebeurtenissen, omdat deze altijd slechts één keer per frame wordt verzonden.

Wanneer alle gebeurtenissen zijn verzonden, begint de renderingfase van de framelus. Op dat punt wordt de status van alle zichtbare elementen op het scherm berekend en worden deze op het scherm getekend. Vervolgens herhaalt het proces zichzelf, zoals een hardloper op een atletiekbaan.

Opmerking: Voor gebeurtenissen die een eigenschap updateAfterEvent hebben, kan het zijn dat wordt afgedwongen dat de rendering meteen plaatsvindt en er dus niet wordt gewacht tot de renderingfase. Vermijd echter het gebruik van updateAfterEvent als dit leidt tot prestatieproblemen.

Het zou het eenvoudigst zijn als de twee fasen in de framelusbewerking even lang duren. Dat zou betekenen dat gedurende de eerste helft van de framelusbewerking gebeurtenishandlers en toepassingscode worden uitgevoerd, en gedurende de tweede helft rendering plaatsvindt. In werkelijkheid is dit meestal niet zo. Soms neemt de toepassingscode meer dan de helft van de beschikbare tijd van het frame in beslag, meer dan er voor is toegewezen, waardoor de beschikbare tijd voor rendering afneemt. In andere gevallen, vooral bij complexe visuele inhoud zoals filters en overvloeiing, duurt de rendering meer dan de helft van de frametijd. De werkelijke tijd die door de fasen in beslag wordt genomen is dus flexibel. Daarom wordt de framelusbewerking ook wel de "elastic racetrack" (elastisch circuit) genoemd.

Als de gecombineerde bewerkingen van de framelusbewerking (uitvoering van code en rendering) te lang duren, kan de runtime de framesnelheid niet handhaven. Het frame wordt groter en duurt langer dan de toegewezen tijd, waardoor er een vertraging optreedt voordat het volgende frame wordt gestart. Als een framelusbewerking bijvoorbeeld langer dan een dertigste seconde duurt, kan de runtime het scherm niet met een frequentie van 30 frames per seconde bijwerken. Wanneer de framesnelheid afneemt, wordt de gebruikerservaring slechter. In het beste geval wordt een animatie schokkerig afgespeeld. In het slechtste geval loopt de toepassing vast en wordt een leeg scherm weergegeven.

In de volgende bronnen vindt u meer informatie over het uitvoeren van runtimecode en rendering in het Flash-platform: