<h2>Votre Formation vidéo</h2><br/>
Votre formation est décomposée<br/>
en chapitres très clairs de 20 à 30 min. <h2>Des exemples SWF </h2><br/>
Chaque leçon est accompagnée<br/>
du code source avec le fla et les classes. <h2>Votre Suivi personnalisé</h2><br/>
Vous pouvez  me poser toutes<br/>
vos questions sous les cours vidéos.
Devenez Membre de la Formation AS3 Facile

11 astuces pour optimiser votre code ActionScript 3

0 question

Écrit le 8 novembre par Matthieu
Publié dans le(s) sujet(s) ActionScript 3

Mots clés : , , , , , , , , ,

Le Kit du Développeur Flash

Un Cours ActionScript 3 réclamés par les Développeurs suivant la Formation AS3 Facile.

Vous trouverez un ensemble de conseils à suivre pour optimiser votre code ActionScript 3 et le rendre plus performant icon wink 11 astuces pour optimiser votre code ActionScript 3

J’ai testé chacun de ces exemples dans des applications flash. Il existe plusieurs benchmarks sur internet montrant les gains de performances.

1 – Évitez les multiplications dans les boucles

Mauvaise version

Le résultat est multiplié par un facteur 10 à chaque boucle. La multiplication n’est pas nécessaire.

const n: int;
var i: int;
 
var result: int;
 
for( i = 0; i < n; ++i )
{
	result= i * 10;
	trace( result.toString() );
}

Version correcte

La multiplication peut être remplacée par une addition qui est beaucoup moins gourmande en ressources mémoires.

Et nous obtenons exactement le même résultat.

additioncode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
const n: int;
var i: int;
 
var result: int;
 
for( i = 0; i < n; ++i )
{
	trace( result.toString() );
	value += 10;
}

2 – Le Casting

Mauvaise version

Les éléments du tableau sont demandés directement. C’est une mauvaise solution parce que le Player Flash ne connait pas l’objet et la refactorisation du code est impossible.

castingcode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
const list: Array /* type VectorTest */;
var i: int = list.length;
 
while( --i > -1 )
	list[ i ].x = Math.random();

Versions correctes

Il suffit de caster l’objet à l’intérieur du tableau pour améliorer les performances.

castingcode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
const list: Array /* de VectorTest */;
var i: int = list.length;
 
while( --i > -1 )
	VectorTest( list[ i ] ).x = Math.random();

Dans la majorité des cas, utilisez plutôt les Vecteurs pour typer vos tableaux.

castingcode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
const list: Vector.<VectorTest>;
var i: int = list.length;
 
while( --i > -1 )
	list[ i ].x = Math.random();

3 – Réutilisez les instances créées

Mauvaise version

Dans l’exemple suivant, l’instance Point est créée à chaque itération. C’est très couteux en ressource et inutile.

instancescode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
const n: int = 1024;
 
for( var i: int = 0; i < n; ++i )
{
	var point: Point = new Point();
 
	point.x = point.y = Math.random();
 
	// utilisation du "point" ...
}

Version correcte

Il n’est pas nécessaire de créer une nouvelle instance de Point à chaque itération. Une seule instance est nécessaire pour la boucle.

instancecode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
const n: int = 1024;
var point: Point = new Point();
 
for( var i: int = 0; i < n; ++i )
{
	point.x = point.y = Math.random();
 
	// utilisation du "point" ...
}

4 – L’appel de fonction

Lorsque c’est possible, évitez d’appeler directement les fonctions Math() de Flash Player. Elles sont couteuses en ressources.

Remplacez les fonctions Math par leurs équivalents avec les opérations (additions, multiplications…).

fonctioncode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
// version lente
y = Math.abs(x);
 
// version équivalente beaucoup plus rapide
y = x > 0.0 ? x : -x;

5 – Le typage

Mauvaise version

Dans l’exemple ci-dessous, la création de l’objet n’est pas typée. C’est une mauvaise solution parce que le Player Flash ne connait pas l’objet. C’est une pratique non recommandée pour le refactoring et la Programmation Orientée Objet.

typagecode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
for( var i: int = 0; i < 1033; ++i )
{
	var oData: Object = {};
 
	oData.x = 1.0;
	oData.y = 2.0;
	oData.z = 3.0;
}

Version correcte

Lors de la création de l’objet, typez ses propriétés correctement. Ainsi le Player Flash connait l’objet et peut lui appliquer des optimisations spécifiques, en fonction du type (Number, String,…).

typagecode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
package
{
	public final class Data
	{
		public var x: Number;
		public var y: Number;
		public var z: Number;
	}
}
 
// dans un autre fichier ActionScript
for( var i: int = 0; i < 1033; ++i )
{
	var oData: Data= new Data();
 
	oData.x = 1.0;
	oData.y = 2.0;
	oData.z = 3.0;
}

6 – Déclaration de variables

Mauvaise version

Lorsque vous avez besoin de déclarer plusieurs variables, la déclaration une ligne par variable n’est pas une solution optimisée.

var a:int=0;
var b:int=0;
var c:int=0;

Version correcte

Pour déclarer plusieurs variables, il est plus optimisé d’utiliser la déclaration sur une seule ligne icon wink 11 astuces pour optimiser votre code ActionScript 3

var a:int=0, b:int=0, c:int=0;

7 – Boucle For

Une règle très simple en ActionScript 3, utilisez des integers pour les itérations de vos boucles.

Mauvaise version

for (var i: Number = 0; i < n; i++)
void;

Version correcte

Pour une exécution plus rapide, utilisez int à la place de Number dans vos boucles.

for (var i: int = 0; i < n; i++)
void;

8 – Optimisation des multiplications

Si vous utilisez cette opération i*33, le résultat sera de type Number.

L’accès au tableau est optimisé pour les types int. Donc pour vos calculs dans les tableaux, pensez au casting du résultat en int.

Mauvaise version

for (;i<n2;i++)
	Data(array[i*2]).x = 2;

Version optimisée

for (;i<n2;i++)
	Data( array[ int(i*2) ] ).x = 2;

9 – Les constantes des autres classes

Une autre optimisation concerne l’utilisation d’une constante provenant d’une autre classe.

Mauvaise version

var iVar:int;
 
for(var i:Number=0; i<100000; i++)
{
	iVar = UneClass.UNE_CONSTANT;
}

Version correcte

Le code précédent peut être optimisé en sortant la constante de la boucle.

Vous créez une variable en dehors de la boucle pour recevoir la constante.

var iVar:int;
var iConstant:int = UneClass.UNE_CONSTANT;
 
for(var i:Number=0; i<100000; i++)
{
	iVar = iConstant;
}

10 – Les opérateurs sur les bits

L’utilisation des opérateurs sur les bits augmente significativement les performances.

A la place de la multiplication et de la division utilisation les syntaxes sur les bits.

Mauvaise version

for(var i:int=0; i<100000; i++)
{
	var val1:int = 4 * 2;
	var val2:int = 4 * 4;
	var val3:int = 4 / 2;
	var val4:int = 4 / 4;
}

Version optimisée

for(var i:int=0; i<100000; i++)
{
	var val1:int = 4 << 1;
	var val2:int = 4 << 2;
	var val3:int = 4 >> 1;
	var val4:int = 4 >> 2;
}

11 – Utilisez des Vector à la place des Array

Le Player Flash version 10 a ajouté un nouveau type de données les Vector (ou Vecteurs).

Les Vector sont plus rapides que les Array pour générer des listes des données et parcourir des collections.

Version Array non optimisée

Vectorcode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
var a:Array = new Array(LENGTH);
 
for(var i:int = 0; i < LENGTH; i++)
{
	a[i] = Math.random() * 100000;
}

Version équivalent avec Vector

Vectorcode 11 astuces pour optimiser votre code ActionScript 3 printer 11 astuces pour optimiser votre code ActionScript 3 info 11 astuces pour optimiser votre code ActionScript 3 
var v:Vector.<Number> = new Vector.<Number>(LENGTH, true);
 
for(var i:int = 0; i < LENGTH; i++)
{
	v[i] = Math.random() * 100000;
}

Pour aller plus loin dans l’optimisation ActionScript 3

Il y a encore plusieurs autres optimisations à apporter dans votre développement Flash.

Je vous conseille d’étudier l’excellent livre de Thibault Imbert sur l’optimisation des publicités.

Avez-vous d’autres optimisations à suggérer ?

Partagez vos optimisations de code ActionScript 3 dans les commentaires ci-dessous.

Devenez Développeur Flash !
Rejoignez les 1500 membres AS3 Facile. Recevez des Cours Vidéos Actionscript Gratuits. Accéder à la Formation AS3 Facile dès maintenant. Renseignez votre Prénom puis votre Email ci-dessous.
icon cs5 11 astuces pour optimiser votre code ActionScript 3
poweredby 11 astuces pour optimiser votre code ActionScript 3

Cours AS3 pouvant vous intéresser :

Une question sur ce cours ?

Vous avez un point bloquant ?
Besoin d'explications supplémentaires ?
Ou vous voulez partager votre code source.
Votre adresse de messagerie ne sera pas publiée.
Les champs obligatoires sont indiqués avec *

*


Notifiez-moi des réponses à venir via email.
Vous pouvez aussi vous abonner sans commenter.