Flex ActionScript – Benchmark Flash Player 10 et Flash Player 10.1
Pour ceux qui auraient encore des doutes, oui Flash Player 10.1 est une énorme évolution par rapport à Flash Player 10. Jackson Dunstan a d'ailleurs publié un benchmark comparatif entre Flash Player 10 et Flash Player 10.1:
- Flash Player 10.1 Performance: Part 1
- Flash Player 10.1 Performance: Part 2
- Flash Player 10.1 Performance: Part 3
- Flash Player 10.1 Performance: Part 4
- Flash Player 10.1 Performance: Part 5
Je ne vais pas reprendre les résultats sur cette page, visitez donc son site, tout est bien présenté. Comme prévu, Flash Player 10.1 est globalement plus rapide que FP10, notamment au niveau des boucles.
Seul regret, l'appel à une variable par un getter est maintenant 3x plus lent (2x plus lent avec FP 10) que l'accès à une variable public. C'est compréhensible car on appelle une fonction avant d'accéder à la variable mais c'est dommage, car cela rendait le code plus propre. Il faut savoir faire des compromis …
Comparaison de performances entre rendu Vectoriel et Bitmap avec Flash Player (cacheAsBitmap)
Il y a quelques mois, j'ai développé une application de dessin à-la-Illustrator pouvant gérer des centaines, voire des milliers d'objets à l'écran. Ces objets sont tous des objets vectoriels, dessinés avec Flash Player (moveTo, lineTo & Co) et quand on ajoute autant d'objets, les performances générales de l'application commencent à souffrir. C'est à ce moment-là que j'ai commencé à m'intéresser à l'optimisation des éléments vectoriels.
Heureusement, cela fait longtemps que d'autres se sont posé la question, surtout depuis Flash Player 8 (qui était bien plus lent que FP9) et ont écrit de très bon articles à ce propos. Même si ces articles ont été écrits il y a 3, 4 voire 5 ans, ils sont toujours pertinents. Voici ma sélection:
- Varicose-g: High-Performance Graphics in Flash 8 par Grant Skinner
- Vector vs. Bitmap: file-size and performance par Aral Balkan
Comme cela est précisé dans le 2eme article, Flash Player est très bon pour afficher rapidement un objet vectoriel mais cela lui demande du calcul processeur et si les calculs sont trop nombreux, votre CPU arrive à saturation et votre application va se mettre à ramer.
Aral Balkan propose un petit exemple très pertinent pour illustrer ses propos. Je l'ai rapidement recréé sous Flash Builder 4 (l'exemple de base était fait avec Flash Pro) et voici ce que cela donne:
Flex Source Code Download: Télécharger le code source complet de l'application
Fonctionnement de l'application de test
L'application est très simple, au départ, on ajoute 1000 lignes (vectorielles donc) aléatoires à un UIComponent.
Quand l'utilisateur appuie sur "Start", on va faire bouger cet UIComponent en x/y de manière aléatoire. Le changement de position de ce composant va demander un nouveau rendu à Flash Player.
Le bouton "Make it Vector / Make it Bitmap" permet de basculer la propriété cacheAsBitmap (si on clique sur Make It Bitmap, cela passe cacheAsBitmap à true).
La propriété "cacheAsBitmap" indique à Flash Player qu'il doit prendre "une capture" du composant et la garder en temps que Bitmap et plus en temps qu'objet vectoriel.
Flex ActionScript – Optimiser votre code AS3
Le dernier article parlait de la manière la plus rapide de copier une ArrayAS3. Ce genre d'optimisation simple peut vous permettre d'accélérer vos temps de calcul lorsque vous faîtes de lourdes opérations en ActionScript. Voici quelques conseils qui vous permettront d'optimiser facilement votre code ActionScript. La plupart de ces conseils sont repris de plusieurs blog dont le wiki d'OsFlash
Conseils et généralités
N'utilisez pas de type Object si vous connaissez les propriétés que vous allez utiliser. Par exemple, si vous voulez définir un point dans l'espace, vous pourriez créer un Object avec 3 propriétés (x, y, z). Pourtant, il faudrait mieux créer une classe Vertex avec ces 3 propriétés xyz. Les performances sont bien meilleures!
Flex ActionScript – Test des performances de l'ActionScript 3
Il y a quelques jours, je suis tombé sur un article très intéressant sur le blog de businessintelligence.me, qui a crée un outil permettant de mesurer les performances de certaines portions de code en ActionScript 3 (AS3). Par exemple, il compare différentes manières d'itérer sur un tableau. Exemple simple, dans une boucle for(), si vous itérez sur un Number ou sur un int, cela peut être deux fois plus long. Le test comporte pour l'instant 9 tests différents de code ActionScript, en vous donnant le code des différents tests effectués.
ActionScript 3 Performance Tester
Parmi ces tests, vous pourrez retrouver comment:
- Incrémenter une variable (i++, i = i+1, i +=1)
- Division (i/2, i*0.5, i<<1)
- Parcours de structures (Array, Object, Dictionary)
- Boucles (for, while, ...)
- ... et même vos propres morceaux de code (beta)





