DeviceCentral

ONDERWERP KOMT VOOR IN:

ActionScript optimaliseren voor Flash Lite-inhoud op mobiele apparaten

De meeste mobiele apparaten hebben slechts een beperkte verwerkingssnelheid en een beperkte hoeveelheid beschikbaar geheugen. Volg daarom deze richtlijnen bij het ontwikkelen van ActionScript voor Flash Lite-inhoud die bestemd is voor mobiele apparaten:

  • Houd het bestand en de code ervan zo eenvoudig mogelijk. Verwijder filmclips die u niet gebruikt, verwijder overbodige frame- en codelussen en gebruik vooral niet te veel frames of externe frames.

  • Het gebruik van FOR-lussen kan ook sterk vertragend werken, omdat het controleren van de voorwaarde bij elke iteratie veel tijd kost. Als het gebruik van iteraties en lussen te veel tijd gaat kosten, kunt u beter meerdere bewerkingen afzonderlijk uitvoeren in plaats van lus te gebruiken. De code is in dat geval misschien langer, maar de inhoud wordt wel sneller en beter afgespeeld.

  • Stop een lusbewerking voor frames zodra deze niet meer nodig is.

  • Probeer verwerking van tekenreeksen en matrices zoveel mogelijk te voorkomen, want daarmee wordt de CPU zwaar belast.

  • Probeer altijd rechtstreeks toegang te krijgen tot eigenschappen; gebruik liever geen ActionScript-methoden voor het ophalen en instellen van eigenschappen, omdat deze meer tijd kosten dan andere methodeaanroepen.

  • Beheer gebeurtenissen op een verstandige manier. Zorg dat gebeurtenislistener-matrices compact blijven door voorwaarden te gebruiken om te controleren of een bepaalde listener bestaat (niet null is) voordat u deze aanroept. Wis alle actieve intervallen door clearInterval aan te roepen en verwijder alle actieve listeners door removeListener aan te roepen voordat u inhoud verwijdert met unloadapplication of removeapplicationClip. Flash haalt SWF-gegevens (bijvoorbeeld van intervallen en listeners) niet opnieuw uit het geheugen op als er nog steeds ActionScript-functies zijn die verwijzen naar de SWF-gegevens wanneer een filmclip uit het geheugen is verwijderd.

  • Zorg dat u variabelen die u niet langer nodig hebt, verwijdert. U kunt deze ook op null instellen om ze te markeren voor 'garbage collection' (het verwijderen van elementen waarnaar niet langer wordt verwezen). Door variabelen te verwijderen helpt u het geheugengebruik te optimaliseren tijdens runtime omdat elementen die u niet nodig hebt, uit het SWF-bestand zijn verwijderd. U kunt variabelen beter verwijderen dan op null instellen.

  • Verwijder listeners expliciet van objecten door voorafgaande aan de 'garbage collection'removeListener aan te roepen.

  • Wordt een functie dynamisch aangeroepen en geeft deze een vaste set parameters door, gebruik dan call in plaats van apply.

  • Maak naamruimten (zoals paden) compacter om de opstarttijd te verminderen. Elk niveau in het pakket wordt gecompileerd tot een IF-instructie en leidt tot een nieuwe Object-aanroep, dus als er minder niveaus in het pad aanwezig zijn, kost de verwerking van het pad minder tijd. Een pad met bijvoorbeeld de niveaus com.xxx.yyy.aaa.bbb.ccc.funtionName leidt ertoe dat er een object wordt gemaakt voor com.xxx.yyy.aaa.bbb.ccc. Sommige ontwikkelaars die werken met Flash, gebruiken voorverwerkingssoftware om het pad om te zetten in een unieke id, zoals 58923409876.functionName, voordat de SWF-code wordt gecompileerd.

  • Bestaat een bestand uit meerdere SWF-bestanden die dezelfde ActionScript-klassen gebruiken, sluit deze klassen dan uit bij het selecteren van SWF-bestanden tijdens het compileren. Hiermee kunt u de tijd die het kost om een bestand te downloaden verkorten en de geheugenbehoefte tijdens runtime verminderen.

  • Maak zo min mogelijk gebruik van Object.watch en Object.unwatch, omdat anders bij elke wijziging die in een eigenschap van een object wordt aangebracht, de speler moet vaststellen of er een wijzigingsbericht moet worden verzonden.

  • Als het voltooien van de ActionScript-code die wordt uitgevoerd in een keyframe in de tijdlijn, langer dan 1 seconde duurt, kunt u de code het beste opsplitsen en verdelen over meerdere keyframes.

  • Verwijder trace-instructies uit de code wanneer u het SWF-bestand publiceert. Schakel daartoe het selectievakje Omit Trace Actions in op het tabblad Flash in het dialoogvenster Publish Settings.

  • Door overname wordt het aantal methodeaanroepen vergroot en wordt er meer geheugen gebruikt: een klasse die alle functionaliteit bevat die nodig is, is efficiënter tijdens runtime dan een klasse die een deel van haar functionaliteit overneemt van een bovenliggende klasse. Daarom moet u bij het maken van uw ontwerp de uitbreidbaarheid van klassen en de efficiëntie van de code tegen elkaar afwegen.

  • Als een SWF-bestand een ander SWF-bestand laadt dat een aangepaste ActionScript-klasse bevat (bijvoorbeeld foo.bar.CustomClass) en als vervolgens het SWF-bestand uit het geheugen wordt verwijderd, blijft de klassedefinitie in het geheugen aanwezig. Om geheugen te sparen, kunt u alle aangepaste klassen van SWF-bestanden die uit het geheugen zijn verwijderd, expliciet verwijderen. Gebruik de instructie delete en geef de volledig klassenaam op, zoals: delete foo.bar.CustomClass.

  • Beperk het gebruik van globale variabelen, omdat deze niet worden gemarkeerd voor 'garbage collection' als de filmclip die deze variabelen heeft gedefinieerd, wordt verwijderd.

  • Gebruik geen onderdelen van de standaardgebruikersinterface (beschikbaar in het componentenpaneel in Flash). Deze onderdelen zijn ontworpen voor gebruik op desktopcomputers en zijn niet geoptimaliseerd om te worden uitgevoerd op mobiele apparaten.

  • Gebruik, wanneer dat maar enigszins mogelijk is, geen diep geneste functies.

  • Verwijs niet naar variabelen, objecten of functies die niet bestaan. In vergelijking met de desktopversie van Flash Player, werkt Flash Lite 2 vrij langzaam bij het opzoeken van variabelen die niet bestaan, waardoor het prestatievermogen aanzienlijk afneemt.

  • Definieer geen functies met een anonieme syntaxis. Bijvoorbeeld myObj.eventName = function{ ...}. Expliciet gedefinieerde functies zijn efficiënter, zoals function myFunc { ...}; my Obj.eventName = myFunc;.

  • Gebruik zo weinig mogelijk wiskundige functies en drijvende-kommagetallen. Door het berekenen van deze waarden wordt de inhoud langzamer weergegeven. Als u gedwongen bent wiskundige routines te gebruiken, is het de moeite waard om de waarde vooraf te berekenen en in een matrix van variabelen op te slaan. De waarden kunnen veel sneller uit een gegevenstabel worden opgehaald dan dat Flash de waarden kan berekenen tijdens runtime.