Flex Library – Gérez vos évènements AS3 avec EventController
EventController est une petite librairie AS3 qui pourrait vous aider dans vos projets AS3 et/ou Flex. Au plus on essaie de créer une architecture ayant un couplage faible, plus on utilise d'évènement qui permettent de s'affranchir de ce couplage et permettent d'obtenir des composants ré-utilisables.
Comme le plus souvent, on veut transporter de la données avec l'évènement, on va créer de nouveaux évènements personnalisés. On se retrouve donc à écouter et à propager de nombreux évènements et leur gestion peut-être difficile, ce qui peut mener à des fuites mémoire.
EventController, Event Management made easy. An Actionscript 3 Library
EventController API Documentation
La librairie AS3 EventController essaie de rendre cette gestion plus aisée à travers plusieurs points tout en utilisant le système évènementiel de base de l'AS3.
Utilisation de la classe EC (EventController)
Dans un contexte simple, vous auriez, pour vous inscrire à un évènement:
obj.addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0.0, useWeakReference:Boolean = false):void
Avec EventController, on passe par une méthode static de EventController et on passe en plus, l'objet sur lequel on va écouter l'évènement dans la méthode:
EC.add(obj,type,listener,false,0,false,"myCluster");
Dans ce cas, l'EventController est global (un singleton global au contexte applicatif). Vous pouvez aussi créer un LEC (Local EventController). Pour cela, il suffit de créer une instance du LEC et les méthodes de l'instance du LEC sont les mêmes que celles de l'EC:
var lec:LEC = new LEC(); lec.add(obj,type,listener);
Clusters d'évènements
Un des plus de cette librairie est le système de cluster. Celui va vous permettre de créer des "groupes d'évènement". Vous pourrez ensuite gérer l'ensemble des évènements du groupe d'un seul coup.
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.
Comparaison des performances Flash Player 10 et 10.1 (debug et non-debug) par IBM
IBM a mis depuis longtemps un pied dans l'univers Flex à travers les composants ILOG Elixir (vendus sur le shop d'Adobe). Ces composants sont de très bonne facture mais le prix s'en ressent
.
Des diagrammes, du Gantt, de la carto, des TreeMap, des Charts 3D et j'en passe . Si vous voulez y jeter un oeil, c'est par ici:
Démos IBM ILOG Elixir Enterprise
Sur ses blogs développeur, IBM publie aussi des articles portant sur Flex dont un très intéressant que voici:
Performance: impact of the Flash Player version and of the "optimize" compilation flag
En utilisant leurs composants, qui sont assez lourds en termes de calculs, ils ont réalisé quelques benchmarks plutôt encourageants sur la prochaine version de Flash Player, FP 10.1. Ils ont aussi comparé leur résultats avec les versions Flash Player Debug et Non-Debug (public). L'écart est assez important, cela signifie que si votre application tourne bien sur votre poste avec une version Debug, elle tournera encore mieux sur les postes "normaux", bonne nouvelle
.
Flash Player 10.1 et Air 2 en beta public sur Android 2.2
Le boss d'Adobe en avait parlé, Adobe a bien annoncé la release de Flash Player 10.1 pour le système d'exploitation Android. Il ne sera disponible que pour les systèmes Android 2.2 (a.k.a Froyo pour frozen yoghurt) qui a été dévoilé à la conférence Google I/O.
Voici un petit aperçu de ses fonctionnalités:
Pour l'instant, sont concernés les portables suivants:
- Nexus One
- Motorola Droid
- HTC Incredible
- Sprint EVO
Si par chance vous disposez d'un de ces portables, vous pouvez télécharger Flash Player 10.1 et Adobe Air depuis le Market d'applications.
Flash Player 10.1 sur les labs Adobe
Notez que le Nexus One est disponible chez SFR (en France donc) depuis quelques jours. On parle de la beta de Air 2 sur Android. Des applications natives qui partagent le même code pour Windows, Linux, Mac et Android, en profitant de toutes les fonctionnalités natives, plutôt excellent:
Et puis Google a aussi dévoilé la Google TV, très prometteur avec un bon vieux Flash Player 10.1 dessus pour profiter de la navigation internet sur votre TV:






