DeviceCentral

RUBRIQUE DANS :

Optimisation des performances du code ActionScript pour le contenu Flash Lite sur des périphériques mobiles

En raison des limitations en termes de puissance de traitement et de mémoire disponible sur la plupart des périphériques mobiles, appliquez les directives suivantes lorsque vous développez du contenu ActionScript pour Flash Lite à destination des périphériques mobiles :

  • Simplifiez autant que possible le fichier et son code. Supprimez les clips non utilisés, supprimez les images et les boucles non nécessaires et évitez la lecture de trop d'images ou d'images parasites.

  • L'utilisation de boucles FOR peut être gourmande en ressources en raison du temps système nécessaire pour la vérification de la condition à chaque itération. Lorsque les ressources requises pour l'itération et le temps système pour la boucle sont identiques, exécutez plusieurs opérations plutôt qu'une boucle. Le code peut être plus long, mais les performances seront meilleures.

  • Arrêtez la lecture en boucle d'images dès qu'elle n'est plus requise.

  • Si possible, évitez le traitement de tableaux et de chaînes, car cette opération peut s'avérer particulièrement gourmande en ressources.

  • Essayez toujours d'accéder directement aux propriétés, au lieu d'utiliser les méthodes de lecture/définition d'ActionScript, qui consomment davantage de ressources que les autres méthodes d'appel.

  • Gérez les événements de façon mesurée. Conservez des tableaux d'événements compacts en utilisant des conditions pour détecter la présence d'un écouteur (différent de null) avant d'appeler ce dernier. Supprimez les intervalles actifs en appelant la fonction clearInterval et supprimez tous les tableaux actifs en appelant la fonction removeListener avant de supprimer le contenu à l'aide de la fonction unloadapplication ou removeapplicationClip. Flash ne récupère pas la mémoire des données SWF (par exemple, des intervalles et des tableaux) si des fonctions ActionScript font référence aux données SWF lorsqu'un clip est déchargé.

  • Supprimez les variables obsolètes ou définissez-les sur null, ce qui permet de marquer les données à supprimer. La suppression des variables permet d'optimiser l'utilisation de la mémoire lors de l'exécution, dans la mesure où les actifs superflus sont supprimés du fichier SWF. Il est préférable de supprimer les variables que de les définir sur null.

  • Supprimez de façon explicite les tableaux des objets en appelant la fonction removeListener avant la suppression des données inutiles.

  • Si vous appelez une fonction de façon dynamique et transmettez un ensemble fixe de paramètres, utilisez la fonction call et non pas la fonction apply.

  • Réduisez les espaces de nom (tels que les chemins) pour accélérer le démarrage. Tous les niveaux du package sont compilés à l'aide d'une instruction IF, ce qui entraîne un nouvel appel à Object. Par conséquent, la réduction du nombre de niveaux dans le chemin permet de gagner du temps. Par exemple, un chemin comportant les niveaux com.xxx.yyy.aaa.bbb.ccc.funtionName entraîne la création d'une occurrence d'objet pour com.xxx.yyy.aaa.bbb.ccc. Certains développeurs Flash ont recours à un logiciel de prétraitement pour réduire le chemin à un identificateur unique, tel que 58923409876.functionName, avant de compiler le fichier SWF.

  • Si votre fichier comprend plusieurs fichiers SWF qui utilisent les mêmes classes ActionScript, vous pouvez exclure ces classes de certains fichiers SWF lors de la compilation. Cela permet de réduire le temps de chargement du fichier et la mémoire nécessaire pendant l'exécution.

  • Evitez d'utiliser Object.watch et Object.unwatch, dans la mesure où tout changement de propriété des objets implique que le lecteur détermine si une notification de changement doit être envoyée.

  • Si le code ActionScript qui s'exécute sur une image clé dans le scénario prend plus d'une seconde à s'exécuter, envisagez de fractionner ce code, de façon à répartir son exécution sur plusieurs images clés.

  • Supprimez les instructions trace de votre code lorsque vous publiez le fichier SWF. Pour se faire, activez la case Omettre les actions Trace dans l'onglet Flash de la boîte de dialogue Paramètres de publication.

  • La fonctionnalité d'héritage accroît le nombre d'appels de méthode et utilise davantage de mémoire : une classe incluant l'ensemble des fonctionnalités nécessaires est plus efficace lors de l'exécution qu'une classe qui hérite une partie de ses fonctionnalités à partir d'une superclasse. Par conséquent, il faut établir un compromis entre l'extensibilité des classes et l'efficacité de votre code.

  • Lorsqu'un fichier SWF charge un autre fichier SWF contenant une classe ActionScript personnalisée (par exemple, foo.bar.CustomClass), puis décharge le fichier SWF, la définition de classe reste en mémoire. Pour économiser la mémoire, supprimez de façon explicite les classes personnalisées des fichiers SWF déchargés. Utilisez l'instruction delete et spécifiez le nom de classe avec tous ses attributs, comme dans l'exemple suivant : delete foo.bar.CustomClass.

  • Limitez l'utilisation des variables globales, dans la mesure où elles ne sont pas supprimées automatiquement si le clip qui a servi à les définir a été supprimé.

  • Evitez d'exploiter les composants d'interface standard (disponibles dans le panneau Composants de Flash). Ces composants sont conçus pour s'exécuter sur les ordinateurs de bureau et ne sont pas optimisés pour les périphériques mobiles.

  • Dans la mesure du possible, évitez d'utiliser les fonctions à imbrication complexe.

  • Evitez de référencer des variables, des fonctions ou des objets non existants. Contrairement à la version de bureau de Flash Player, Flash Lite 2 analyse lentement les références aux variables non existantes, ce qui risque d'affecter considérablement les performances.

  • Evitez de définir des fonctions à l'aide d'une syntaxe anonyme. Par exemple, myObj.eventName = function{ ...}. Les fonctions explicitement définies sont plus efficaces, comme la fonction function myFunc { ...}; my Obj.eventName = myFunc;.

  • Réduisez l'utilisation de fonctions mathématiques et de nombres à virgule flottante. Le calcul de ces valeurs ralentit les performances. Si vous devez utiliser des routines mathématiques, essayez de précalculer les valeurs et de les stocker dans des tableaux de variables. L'extraction de valeurs d'une table de données est beaucoup plus rapide que le calcul par Flash au moment de l'exécution.