<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>iq¹² &#187; optimisation</title>
	<atom:link href="http://iq12.com/blog/tag/optimisation/feed/" rel="self" type="application/rss+xml" />
	<link>http://iq12.com/blog</link>
	<description>The drooling company</description>
	<lastBuildDate>Wed, 09 Nov 2011 11:38:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Portfolio : site internet Akoa (2010)</title>
		<link>http://iq12.com/blog/2010/09/01/portfolio-site-internet-akoa-2010/</link>
		<comments>http://iq12.com/blog/2010/09/01/portfolio-site-internet-akoa-2010/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 12:42:42 +0000</pubDate>
		<dc:creator>fu</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[Away3D]]></category>
		<category><![CDATA[iq12]]></category>
		<category><![CDATA[optimisation]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=620</guid>
		<description><![CDATA[voir le site Client :Akoa Agence :Creaktif (conception, DA, développement backoffice) Travaux :développement AS3 (reprise de code, finition et optimisation du site) Points clés :vidéo, 3D, optimisation, reprise de code Technologies :Away3D, WordPress]]></description>
			<content:encoded><![CDATA[<div style="padding-left:15px;margin-bottom:20px;">
<p style="text-align: center;">
<div class="autoviewer" id="ngg_autoviewer24">
<div class="swfobject" id="fo24_1" style="width:600px; height:324px;">
<p>The <a href="http://www.macromedia.com/go/getflashplayer">Flash Player</a> and <a href="http://www.mozilla.com/firefox/">a browser with Javascript support</a> are needed..</p>
</div>
</div>
<script type="text/javascript" defer="defer">
var fo24_1 = {
	params : {
		wmode : "opaque",
		allowfullscreen : "true",
		bgcolor : "#FFFFFF"},
	flashvars : {
		langOpenImage : "Open Image in New Window",
		langAbout : "About",
		xmlURL : "http://iq12.com/blog/wp-content/plugins/nextgen-flashviewer/xml/autoviewer.php?gid=24"},
	attr : {
		styleclass : "autoviewer"},
	start : function() {
		swfobject.embedSWF("http://iq12.com/blog/wp-content/plugins/nggflash-swf/autoviewer.swf", "fo24_1", "600", "324", "7.0.0", false, this.flashvars, this.params , this.attr );
	}
}
fo24_1.start();
</script>
<p><br/><br />
<strong style="width: 620px; display: block; text-align: center; font-size:150%;"><a href="http://www.akoa.fr/flash/" target="_blank">voir le site</a></strong></p>
<p><strong style="width: 120px; display: block; float:left;">Client :</strong>Akoa<br />
<strong style="width: 120px; display: block; float:left;">Agence :</strong><a href="http://creaktif.com/" target="_blank">Creaktif</a> (conception, DA, développement backoffice)<br />
<strong style="width: 120px; display: block; float:left;">Travaux :</strong>développement AS3 (reprise de code, finition et optimisation du site)<br />
<strong style="width: 120px; display: block; float:left;">Points clés :</strong>vidéo, 3D, optimisation, reprise de code<br />
<strong style="width: 120px; display: block; float:left;">Technologies :</strong>Away3D, WordPress
</div>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2010/09/01/portfolio-site-internet-akoa-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portfolio : site internet Lipton Evasion (2009)</title>
		<link>http://iq12.com/blog/2009/12/09/portfolio-site-internet-lipton-evasion-2009/</link>
		<comments>http://iq12.com/blog/2009/12/09/portfolio-site-internet-lipton-evasion-2009/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 16:07:50 +0000</pubDate>
		<dc:creator>fu</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[iq12]]></category>
		<category><![CDATA[optimisation]]></category>
		<category><![CDATA[portfolio]]></category>
		<category><![CDATA[prod]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=588</guid>
		<description><![CDATA[voir le site Client :Lipton Agence :The Brand Nation (conception, sources Flash) Travaux :développement AS3 (reprise de code, adaptation et optimisation d&#8217;un site Lipton polonais) Points clés :optimisation, reprise de code]]></description>
			<content:encoded><![CDATA[<div style="padding-left:15px;margin-bottom:20px;">
<p style="text-align: center;">
<div class="autoviewer" id="ngg_autoviewer18">
<div class="swfobject" id="fo18_2" style="width:600px; height:324px;">
<p>The <a href="http://www.macromedia.com/go/getflashplayer">Flash Player</a> and <a href="http://www.mozilla.com/firefox/">a browser with Javascript support</a> are needed..</p>
</div>
</div>
<script type="text/javascript" defer="defer">
var fo18_2 = {
	params : {
		wmode : "opaque",
		allowfullscreen : "true",
		bgcolor : "#FFFFFF"},
	flashvars : {
		langOpenImage : "Open Image in New Window",
		langAbout : "About",
		xmlURL : "http://iq12.com/blog/wp-content/plugins/nextgen-flashviewer/xml/autoviewer.php?gid=18"},
	attr : {
		styleclass : "autoviewer"},
	start : function() {
		swfobject.embedSWF("http://iq12.com/blog/wp-content/plugins/nggflash-swf/autoviewer.swf", "fo18_2", "600", "324", "7.0.0", false, this.flashvars, this.params , this.attr );
	}
}
fo18_2.start();
</script>
<p><br/><br />
<strong style="width: 620px; display: block; text-align: center; font-size:150%;"><a href="http://prods.iq12.com/lipton-evasion.fr/" target="_blank">voir le site</a></strong></p>
<p><strong style="width: 120px; display: block; float:left;">Client :</strong>Lipton<br />
<strong style="width: 120px; display: block; float:left;">Agence :</strong><a href="http://www.thebrandnation.com/">The Brand Nation</a> (conception, sources Flash)<br />
<strong style="width: 120px; display: block; float:left;height:30px;">Travaux :</strong>développement AS3 (reprise de code, adaptation et optimisation d&#8217;un site Lipton polonais)<br />
<strong style="width: 120px; display: block; float:left;">Points clés :</strong>optimisation, reprise de code
</div>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/12/09/portfolio-site-internet-lipton-evasion-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Employee of the Month</title>
		<link>http://iq12.com/blog/2009/11/19/employee_of_the_month/</link>
		<comments>http://iq12.com/blog/2009/11/19/employee_of_the_month/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 20:07:37 +0000</pubDate>
		<dc:creator>fu</dc:creator>
				<category><![CDATA[Français]]></category>
		<category><![CDATA[AS3 good practices]]></category>
		<category><![CDATA[concours]]></category>
		<category><![CDATA[iq12]]></category>
		<category><![CDATA[optimisation]]></category>

		<guid isPermaLink="false">http://iq12.com/blog/?p=384</guid>
		<description><![CDATA[Mike Chambers a organisé une compétition de programmation AS3 la semaine dernière : AS3DTC_1. J&#8217;aime bien les concours simples qui ne prennent pas trop de temps. Monumentale erreur : j&#8217;ai du écrire beaucoup de code. Du coup mes estimés collègues m&#8217;ont demandé d&#8217;écrire ce post sur la manière que j&#8217;ai utilisée pour prendre la 1ère [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.cartoonstock.com/"><img src="http://iq12.com/blog/wp-content/uploads/2009/11/rnin306l.jpg" alt="Employee of the Month" title="Employee of the Month" width="400" height="354" class="aligncenter size-full wp-image-400" /></a></p>
<p><a href="http://www.mikechambers.com/blog/">Mike Chambers</a> a organisé une compétition de programmation AS3 la semaine dernière : <a href="http://www.mikechambers.com/blog/2009/11/12/update-on-actionscript-3-development-task-contest-1/">AS3DTC_1</a>. J&#8217;aime bien les concours simples qui ne prennent pas trop de temps. Monumentale erreur : j&#8217;ai du écrire <a href="http://github.com/mikechambers/ActionScript-3-Development-Task-Contests/blob/master/AS3DTC_1/entries/ArnaudGatouillat/ProximityManager.as">beaucoup de code</a>.</p>
<p>Du coup mes estimés collègues m&#8217;ont demandé d&#8217;écrire ce post sur la manière que j&#8217;ai utilisée pour <a href="http://www.mikechambers.com/blog/2009/11/16/results-from-as3-development-task-contest-1/">prendre la 1ère place (yaisse !)</a>, en profiter pour en faire un cours sur l&#8217;optimisation, tout ça quoi &#8230;</p>
<p><span id="more-384"></span>L&#8217;objet du concours était d&#8217;avoir une scène découpée en cases (une grille donc), avec dessus un grand nombre de points (10000) et 4 objets à tester. Pour chacun des objets à tester, il est demandé de renvoyer les points voisins (points présents dans la case de l&#8217;objet et les 8 cases adjacentes). Grant Skinner a posté un <a title="AS3 ProximityManager V2" href="http://www.gskinner.com/blog/archives/2009/11/as3_proximityma.html" target="_blank">exemple</a> un peu plus visuel de l&#8217;interêt du problème à résoudre :</p>
<p style="text-align: center;"><script type="text/javascript" src="http://iq12.com/blog/wp-content/plugins/pb-embedflash/js/swfobject.js"></script><span class="embedflash" id="swfida3421d1b3d2d2e0442c9d05946d70794"><small>(Please open the article to see the flash file or player.)</small></span><script type="text/javascript">
				var flashvars = {}; var params = {}; var attributes = {};params.allowfullscreen = "true"; params.allowscriptaccess = "always";
				swfobject.embedSWF("http://www.gskinner.com/blog/assets/ProximityTest.swf","swfida3421d1b3d2d2e0442c9d05946d70794","400","400","9.0.0","http://iq12.com/blog/wp-content/plugins/pb-embedflash/swf/expressInstall.swf",flashvars,params,attributes);
		</script></p>
<p>A chaque appel (il faut imaginer à chaque frame), une liste complète des points est envoyée via un appel à une méthode <strong>update()</strong>. Ensuite pour chaque objet à tester les voisins sont demandés via <strong>getNeighbours()</strong>. Les participations sont départagées par leur vitesse d&#8217;exécution, donc il faut faire le code le plus speed possible.</p>
<p><strong>update()</strong> est donc appelé une seule fois contre plusieurs pour <strong>getNeighbours()</strong>, et toujours avant, <em>il faut donc effectuer un maximum de calculs dans <strong>update()</strong></em>.</p>
<p>L&#8217;autre idée primordiale est de ne faire <em>qu&#8217;une seule boucle sur les 10000 points</em>.</p>
<p>L&#8217;implémentation la plus évidente à mes yeux (mais pas forcement la meilleure, il y a eu des méthodes innovantes à ce niveau, en particulier celle de <a href="http://github.com/mikechambers/ActionScript-3-Development-Task-Contests/blob/master/AS3DTC_1/entries/GrantSkinner/ProximityManager.as">Grant Skinner</a>), est la suivante :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">cases = tableau<span style="color: #66cc66;">&#91;</span>nombre_identifiant<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#91;</span>points<span style="color: #66cc66;">&#93;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span>points<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>point <span style="color: #b1b100;">in</span> points<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		cases<span style="color: #66cc66;">&#91;</span>identifiant_de_case<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span> point <span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> getNeighbours<span style="color: #66cc66;">&#40;</span>test<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	case_centrale = cases<span style="color: #66cc66;">&#91;</span>identifiant_de_case<span style="color: #66cc66;">&#93;</span>
	<span style="color: #b1b100;">return</span> case_centrale.<span style="color: #0066CC;">concat</span><span style="color: #66cc66;">&#40;</span> cases_voisines_1...<span style="color: #cc66cc;">8</span> <span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Le calcul d&#8217;<strong>identifiant_de_case</strong> est effectué plus de 10000 fois, c&#8217;est le principal élément à optimiser. Dans sa forme la plus basique, on veut quelque chose du type :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">identifiant_de_case = caseX <span style="color: #66cc66;">*</span> hauteurGrille + caseY</pre></td></tr></table></div>

<p>avec :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">caseX = uint<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Math</span>.<span style="color: #0066CC;">round</span><span style="color: #66cc66;">&#40;</span>point.<span style="color: #006600;">x</span><span style="color: #66cc66;">/</span>tailleGrille<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">// et pareil pour caseY</span></pre></td></tr></table></div>

<p>&gt;&gt; on optimise ce bout de code et on obtient :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">// les multiplications sont plus rapides que les divisions (à effectuer une seule fois, dans le constructeur)</span>
ratioTailleGrille = <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">/</span>tailleGrille;
<span style="color: #66cc66;">&#91;</span>...<span style="color: #66cc66;">&#93;</span>
caseX = <span style="color: #0066CC;">int</span><span style="color: #66cc66;">&#40;</span>point.<span style="color: #006600;">x</span><span style="color: #66cc66;">*</span>ratioTailleGrille<span style="color: #66cc66;">&#41;</span></pre></td></tr></table></div>

<p>Pour optimiser encore plus, il est possible d&#8217;utiliser des opérateurs sur les bits (les opérations au niveau bit sont très rapides). Rappel: le but de créer un identifiant unique pour chaque case : on cherche donc à obtenir un <strong>int</strong> qui contient en même temps caseX et caseY.</p>
<p>Pour expliquer la méthode, voir le code d&#8217;exemple suivant :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;">caseX = <span style="color: #cc66cc;">12</span>;    <span style="color: #808080; font-style: italic;">// en binaire : 00001100</span>
caseY = <span style="color: #cc66cc;">19</span>;    <span style="color: #808080; font-style: italic;">// en binaire : 00010011</span>
<span style="color: #808080; font-style: italic;">// on décale vers la gauche les bits de caseX pour laisser assez de place à caseY</span>
<span style="color: #808080; font-style: italic;">// ici 8 bits (dans ma classe j'ai poussé le vice à calculer le nombre de bits nécessaires)</span>
<span style="color: #808080; font-style: italic;">// puis on utilise le OU binaire ( | ) pour fusionner les 2 valeurs</span>
identifiant_de_case =
		<span style="color: #66cc66;">&#40;</span>caseX <span style="color: #66cc66;">&lt;&lt;</span> <span style="color: #cc66cc;">8</span><span style="color: #66cc66;">&#41;</span>		<span style="color: #808080; font-style: italic;">// en binaire : 0001001100000000</span>
			<span style="color: #66cc66;">|</span> caseY		<span style="color: #808080; font-style: italic;">// en binaire :         00010011</span>
<span style="color: #808080; font-style: italic;">// identifiant_de_case =		   en binaire : 0010011000010011</span></pre></td></tr></table></div>

<p>Le stockage des items en lui même se fait dans un Vecteur à 2 dimensions :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">var</span> cases:Vector.<span style="color: #66cc66;">&lt;</span>Vector.<span style="color: #66cc66;">&lt;</span>DisplayObject<span style="color: #66cc66;">&gt;&gt;</span></pre></td></tr></table></div>

<p>Un objet (ou Dictionary) liant chaque identifiant à son Vector.&lt;DisplayObject&gt; serait un choix plus logique pour le stockage, mais comme les valeur ne sont pas fortement typées dans un Object, c&#8217;est au final moins rapide.</p>
<p>Beaucoup d&#8217;autres optimisations sont connues (cf. <a href="http://wiki.joa-ebert.com/index.php/Category:Code_Optimization">wiki @joa</a>)</p>
<ul>
<li>remplacer les divisions par des multiplications tant que possible</li>
<li>for(i=0;i&lt;n;i++) est moins efficace que i=n; while(i) { &#8211;i }</li>
<li>vector.push(item) est moins efficace que vector[vector.length]=item;</li>
<li>il faut fortement typer un objet avant d&#8217;appeler une méthode dessus. Par exemple :

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #b1b100;">return</span> cases<span style="color: #66cc66;">&#91;</span>id1<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">concat</span><span style="color: #66cc66;">&#40;</span>cases<span style="color: #66cc66;">&#91;</span>id2<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #808080; font-style: italic;">// est moins efficace que :</span>
<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #b1b100;">case</span>:Vector.<span style="color: #66cc66;">&lt;</span>DisplayObject<span style="color: #66cc66;">&gt;</span> = cases<span style="color: #66cc66;">&#91;</span>id1<span style="color: #66cc66;">&#93;</span>;
<span style="color: #b1b100;">return</span> <span style="color: #b1b100;">case</span>.<span style="color: #0066CC;">concat</span><span style="color: #66cc66;">&#40;</span>cases<span style="color: #66cc66;">&#91;</span>id2<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

</li>
</ul>
<p>Autre feinte :<br />
Dans <strong>getNeighbours()</strong>, normalement il faudrait tester si on est sur les bords, pour savoir si il faut concaténer 9 cases ou moins.<br />
Pour éviter ça, on crée une bande de cases vides autour de la grille réelle. Malheureusement il n&#8217;y a pas d&#8217;index négatif (pour la ligne du haut et la colonne de gauche) dans un stockage avec un Vector. Il faut encore tester ces deux cas.</p>
<p>Enfin, le <strong>vrai boost</strong> (50% de vitesse en plus environ) trouvé en fin de concours (et utilisé que dans mon code je crois) est de tester si les points ont bougé entre 2 appels à <strong>update()</strong>. Si rien n&#8217;a changé on évite de manipuler des données dans tous les sens et on gagne beaucoup de temps.</p>
<p>Depuis, la fonction <strong>update()</strong> ressemble plutôt à :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="actionscript" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> update<span style="color: #66cc66;">&#40;</span>points<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>points.<span style="color: #0066CC;">length</span> <span style="color: #66cc66;">!</span>= oldPointLength<span style="color: #66cc66;">&#41;</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #808080; font-style: italic;">// (ré)initialisation</span>
		<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>point <span style="color: #b1b100;">in</span> points<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			cache<span style="color: #66cc66;">&#91;</span>point<span style="color: #66cc66;">&#93;</span> = identifiant_de_case
			cases<span style="color: #66cc66;">&#91;</span>identifiant_de_case<span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">push</span><span style="color: #66cc66;">&#40;</span> point <span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
	<span style="color: #b1b100;">else</span>
	<span style="color: #66cc66;">&#123;</span>
		<span style="color: #b1b100;">for</span><span style="color: #66cc66;">&#40;</span>point <span style="color: #b1b100;">in</span> points<span style="color: #66cc66;">&#41;</span>
		<span style="color: #66cc66;">&#123;</span>
			<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>cache<span style="color: #66cc66;">&#91;</span>point<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">!</span>= identifiant_de_case<span style="color: #66cc66;">&#41;</span>
			<span style="color: #66cc66;">&#123;</span>
				<span style="color: #808080; font-style: italic;">// ce point à bougé</span>
				cache<span style="color: #66cc66;">&#91;</span>point<span style="color: #66cc66;">&#93;</span> = identifiant_de_case
				<span style="color: #808080; font-style: italic;">// effectuer le changement de case du point</span>
				<span style="color: #66cc66;">&#91;</span>...<span style="color: #66cc66;">&#93;</span>
			<span style="color: #66cc66;">&#125;</span>
		<span style="color: #66cc66;">&#125;</span>
	<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>Voilà, j&#8217;espère que ça va donner de bonnes idées pour optimiser du code AS3. En vérité, ça ne sert que rarement à grand chose de pousser les choses à ce point, sauf quand un petit bout de code pompe une grosse partie des performances espérées.</p>
]]></content:encoded>
			<wfw:commentRss>http://iq12.com/blog/2009/11/19/employee_of_the_month/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

