DEFILEMEDIA : COMPOSANT AS3 DE GESTION DE GALERIE DE MEDIA + CLASS DEBUGTRACE DE

Signaler
Messages postés
22
Date d'inscription
samedi 24 mars 2007
Statut
Membre
Dernière intervention
14 novembre 2010
-
Messages postés
25
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
26 mai 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/45886-defilemedia-composant-as3-de-gestion-de-galerie-de-media-class-debugtrace-de-debugging-evolue

Messages postés
25
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
26 mai 2009

Tiens marrant, mon temps d'exécution est à 1968 !! décidement ça me colle à la peau ;-)

Top30, je suis puper impressionné par ta rapidité à pisser du code !!!
Je m'incline,
OK j'ai fait une grosse erreur je devrais m'occuper de la position qu'après avoir tester la longueur et je devrais mettre un pointeur "child" sur __mediaList [i];

Mais je continue à tenir tête face aux puissant Top30 !!
Dans une de tes deux fonctions (__1condition_puisSiTrue_1seuleAutreCondition) pour rester rigoureux, si (length>0) il faut ajouter :
child.visible = true ;
Et pour être plus proche de mon composant il faut reduire l'alétoire de la longueur à 100
(longueur qui sera souvent utilisé pour un media reduit)

package
{
import flash.events.Event ;
import flash.events.TimerEvent ;
import flash.display.Sprite ;
import flash.utils.Timer ;
import flash.utils.getTimer ;
//
//
public class SpeedTest
extends Sprite
{
private var __mediaList : Array = [];
private var __testsQty : uint = 500000 ;
private var __startTime : uint = 0 ;
private var __direction : String = '' ;
private var __testName : String = '' ;
//
//
public function SpeedTest () : void
{
__mediaList = [];
while (__mediaList.length < 50 ) __mediaList.push (new Sprite ());
//
var timer : Timer = new Timer (1000, 5);
timer.addEventListener ('timer', runTests );
timer.start ();
}
//
//
public function runTests ($e : TimerEvent ) : *
{
var timer : Timer = Timer ($e.target);
switch (timer.currentCount )
{
case 1 : return __toujours2conditions ('TomBoul');
case 2 : return __1condition_puisSiTrue_3conditions ('Top30');
case 3 : return __1condition_puisSiTrue_1seuleAutreCondition ('Top30');
case 4 : return __1conditionPuis2conditions ('TomBoul');
case 5 : return __1conditionPuis2conditionsAccesPointeur ('TomBoul');
}
return null ;
}
//
//
public function __toujours2conditions ( $author:String ) : *
{
__testStart ($author, "__toujours2conditions");
//
var n : Number = - 1 ;
while ( ++ n < __testsQty )
{
var i : Number = Math.floor (Math.random () * __mediaList.length );
var length : Number = Math.round (Math.random ()*100);
var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
//
if (direction == "horizontal")
{
__mediaList [i].x = 10 ;
__mediaList [i].width = length;
} else
{
__mediaList [i].y = 10;
__mediaList [i].height = length;
}
//
if(length>0)
{
__mediaList [i].visible = true;
} else
{
__mediaList [i].visible = false;
}
}
__testEnd ();
return null ;
}
//
//
public function __1conditionPuis2conditions ( $author:String ) : *
{
__testStart ($author, "__1conditionPuis2conditions");
//
var n : Number = - 1 ;
while ( ++ n < __testsQty )
{
var i : Number = Math.floor (Math.random () * __mediaList.length );
var length : Number = Math.round (Math.random ()*100);
var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
//
__mediaList [i].visible = false;
if(length>0) {
if (direction == "horizontal")
{
__mediaList [i].x = 10 ;
__mediaList [i].width = length;
} else
{
__mediaList [i].y = 10;
__mediaList [i].height = length;
}
__mediaList [i].visible = true;
}
}
__testEnd ();
return null ;
}
//
//
public function __1conditionPuis2conditionsAccesPointeur ( $author:String ) : *
{
__testStart ($author, "__1conditionPuis2conditionsAccesPointeur");
//
var n : Number = - 1 ;
while ( ++ n < __testsQty )
{
var i : Number = Math.floor (Math.random () * __mediaList.length );
var length : Number = Math.round (Math.random ()*100);
var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
//
var child : Sprite = __mediaList [i];
child.visible = false ;
if(length>0) {
if (direction == "horizontal")
{
child.x = 10 ;
child.width = length;
} else
{
child.y = 10;
child.height = length;
}
child.visible = true;
}
}
__testEnd ();
return null ;
}
//
//
public function __1condition_puisSiTrue_3conditions ($author:String ) : *
{
__testStart ($author , "__1condition_puisSiTrue_3conditions");
//
var n : Number = - 1 ;
while ( ++ n < __testsQty )
{
var i : Number = Math.floor (Math.random () * __mediaList.length );
var length : Number = Math.round (Math.random ()*100);
var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
//
var child : Sprite = __mediaList [i];
child.visible = false ;
//
if (length > 0)
{ var isH : Boolean (direction 'horizontal' );
var axe : String = (isH? 'x' : 'y' );
var siz : String = (isH? 'width' : 'height' );
//
child [axe] = 10 ;
child [siz] = length ;
child.visible = true ;
}
}
__testEnd ();
return null ;
}
//
//
public function __1condition_puisSiTrue_1seuleAutreCondition ($author:String ) : *
{
__testStart ($author, "__1condition_puisSiTrue_1seuleAutreCondition");
//
var n : Number = - 1 ;
while ( ++ n < __testsQty )
{
var i : Number = Math.floor (Math.random () * __mediaList.length );
var length : Number = Math.round (Math.random ()*100);
var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
//
var child : Sprite = __mediaList [i];
child.visible = false ;
//
if (length > 0)
{
if (direction == 'horizontal' ) __setMediaH (child, 10, length);
else __setMediaV (child, 10, length);
child.visible = true ; // tomboul
}
}
__testEnd ();
return null ;
}
//
//
private function __setMediaH ($child : Sprite, $pos : Number, $size : Number ) : void
{
$child.x = $pos ;
$child.height = $size ;
}
//
//
private function __setMediaV ($child : Sprite, $pos : Number, $size : Number ) : void
{
$child.y = $pos ;
$child.width = $size ;
}
//
//
private function __testStart ($id : String, $fonc : String ) : void
{
__testName = $id ;
__startTime = getTimer ();
//
trace ('Test ' + $id + "(" + $fonc + ') : START');
}
//
//
private function __testEnd () : void
{
var id : String = __testName ;
var time : uint = getTimer () - __startTime ;
//
trace ('Test ' + id + ' : END');
trace ('fonction exécutée ' + __testsQty + ' fois en ' + time + ' ms.' );
trace ('' );
}
}
}

affiche :

Test TomBoul(__toujours2conditions) : START
Test TomBoul : END
fonction exécutée 500000 fois en 1781 ms.

Test Top30(__1condition_puisSiTrue_3conditions) : START
Test Top30 : END
fonction exécutée 500000 fois en 2076 ms.

Test Top30(__1condition_puisSiTrue_1seuleAutreCondition) : START
Test Top30 : END
fonction exécutée 500000 fois en 1500 ms.

Test TomBoul(__1conditionPuis2conditions) : START
Test TomBoul : END
fonction exécutée 500000 fois en 2081 ms.

Test TomBoul(__1conditionPuis2conditionsAccesPointeur) : START
Test TomBoul : END
fonction exécutée 500000 fois en 1484 ms.

En les cas tout merci à toi et BananaTree, j'apprends beaucoup avec vous ...
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

package
{
import flash.events.Event ;
import flash.events.TimerEvent ;
import flash.display.Sprite ;
import flash.utils.Timer ;
import flash.utils.getTimer ;
//
//
public class SpeedTest
extends Sprite
{
private var __mediaList : Array = [];
private var __testsQty : uint = 500000 ;
private var __startTime : uint = 0 ;
private var __direction : String = '' ;
private var __testName : String = '' ;
//
//
public function SpeedTest () : void
{
__mediaList = [];
while (__mediaList.length < 50 ) __mediaList.push (new Sprite ());
//
var timer : Timer = new Timer (1000, 3);
timer.addEventListener ('timer', runTests );
timer.start ();
}
//
//
public function runTests ($e : TimerEvent ) : *
{
var timer : Timer = Timer ($e.target);
switch (timer.currentCount )
{
case 1 : return __toujours2conditions ('TomBoul');
case 2 : return __1condition_puisSiTrue_3conditions ('Top30');
case 3 : return __1condition_puisSiTrue_1seuleAutreCondition ('Top30');
}
return null ;
}
//
//
public function __toujours2conditions ( $author:String ) : *
{
__testStart ($author);
//
var n : Number = - 1 ;
while ( ++ n < __testsQty )
{
var i : Number = Math.floor (Math.random () * __mediaList.length );
var length : Number = Math.round (Math.random ());
var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
//
if (direction == "horizontal")
{
__mediaList [i].x = 10 ;
__mediaList [i].width = length;
} else
{
__mediaList [i].y = 10;
__mediaList [i].height = length;
}
//
if (length > 0)
{
__mediaList [i].visible = true;
} else
{
__mediaList [i].visible = false;
}
}
__testEnd ();
return null ;
}
//
//
public function __1condition_puisSiTrue_3conditions ($author:String ) : *
{
__testStart ($author);
//
var n : Number = - 1 ;
while ( ++ n < __testsQty )
{
var i : Number = Math.floor (Math.random () * __mediaList.length );
var length : Number = Math.round (Math.random ());
var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
//
var child : Sprite = __mediaList [i];
child.visible = false ;
//
if (length > 0)
{
var isH : Boolean (direction 'horizontal' );
var axe : String = (isH? 'x' : 'y' );
var siz : String = (isH? 'width' : 'height' );
//
child [axe] = 10 ;
child [siz] = length ;
child.visible = true ;
}
}
__testEnd ();
return null ;
}
//
//
public function __1condition_puisSiTrue_1seuleAutreCondition ($author:String ) : *
{
__testStart ($author);
//
var n : Number = - 1 ;
while ( ++ n < __testsQty )
{
var i : Number = Math.floor (Math.random () * __mediaList.length );
var length : Number = Math.round (Math.random ());
var direction : String = (Math.random () > 0.5? 'horizontal' : 'vertical' );
//
var child : Sprite = __mediaList [i];
child.visible = false ;
//
if (length > 0)
{
if (direction == 'horizontal' ) __setMediaH (child, 10, length);
else __setMediaV (child, 10, length);
}
}
__testEnd ();
return null ;
}
//
//
private function __setMediaH ($child : Sprite, $pos : Number, $size : Number ) : void
{
$child.x = $pos ;
$child.height = $size ;
}
//
//
private function __setMediaV ($child : Sprite, $pos : Number, $size : Number ) : void
{
$child.y = $pos ;
$child.width = $size ;
}
//
//
private function __testStart ($id : String ) : void
{
__testName = $id ;
__startTime = getTimer ();
//
trace ('Test ' + $id + ' : START');
}
//
//
private function __testEnd () : void
{
var id : String = __testName ;
var time : uint = getTimer () - __startTime ;
//
trace ('Test ' + id + ' : END');
trace ('fonction exécutée ' + __testsQty + ' fois en ' + time + ' ms.' );
trace ('' );
}
}
}


// Affiche :

Test TomBoul : START
Test TomBoul : END
fonction exécutée 500000 fois en 1968 ms.

Test Top30 : START
Test Top30 : END
fonction exécutée 500000 fois en 1197 ms.

Test Top30 : START
Test Top30 : END
fonction exécutée 500000 fois en 916 ms.

//
Sachant que moi dans mes classes, je pratiquais la version 2 !
Dorénavant je pratiquerais la version 3....
Messages postés
25
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
26 mai 2009

Pour la poo, je m'incline et reste à l'affut de toutes infos pouvant améliorer mes compétences d'amateur !!!
pour Cédric Tabin que je me suis empressé d'aller voir c'est la :
http://www.mediabox.fr/b_MAX+:+Optimiser+son+code+AS3+avec+C%C3%A9dric+Tabin.html
Messages postés
337
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2010

conceptuellement, les 2 codes ne sont pas optimums.
j'au toujours pas téléchargé le bidule, mais :

var hor : Boolean (sensDefilement "horizontal");
var axe : String = (hor? 'x' : 'y');
var size : String = (hor? 'width' : 'height');

normalement on devrait avoir :

private var _horizontal : Boolean;
private var _axe : String ;
private var _size : Number ;

ces valeurs devraient être mise à jour dans une action spécifique appellée par des mutateurs du type,
monBidule.horientation = monBidule.VERTICAL;

et logiquement par le constructeur pour l'initialisation des valeurs si pas déclarées par défaut...

là on est plus dans le byte code, on revient au bercail de la poo ;)
pour l'optimisation, cf. l'article de cédric tabin (perdu qq part sur la toile)
Afficher les 14 commentaires