AS3 tips #3 PDF Skriv ut Skicka sidan
2010-02-28 02:41

Om du är ute efter en snabb och effektiv loop så kolla här....

Den vanligaste loopen som vi använder är for-loop som ser ut så

for ( var i:uint = 0; i < 10; i++){
    trace(i);
}

Med det sättet att loopa är inte det snabbaste. Om du tänker så, varje rad av den lilla loopen måste köras. Dvs Flash måste köra att i är en uint, den måste köra att i är mindre än 10 och den måste köra att i ökar med en enhet vid varje loop. Alltså, (exempelvis) det som loopen har kört redan 3 gånger, måste den köra 7 gånger till.

 

(notera att tiden i millisekunder kan variera från dator till dator)

Men det finns ett effektivare sätt att loopa.

Först, vi  kör en enkel prestanda test på vår for-loop:

var MAX:uint = 5000000; //5 miljoner gånger
var ARRAY:Array = new Array();
var st:Number = getTimer();
for (var i = 0; i < MAX; i++) {
 ARRAY.push (i);
}
trace ( getTimer() - st); // 699 ms

En for-loop tar  cirka 700 ms på sig att komma til slutet... men den andra varianten då ?

var MAX:uint = 5000000; //5 miljoner gånger
var ARRAY:Array = new Array();
var st:Number = getTimer();
while ( --MAX > -1) {
 ARRAY.push (MAX);
}
trace ( getTimer() - st); //582 ms

Det är alltså en  skillnad med 100 ms (Japp, det är också  tid).

 

Nu så, om du ändrar till MAX värdet till 100, och kör trace på detta så märker du att denna loop kör baklänges jämfört med for-loop.

Alltså for-loop kör 0-1-2-3-4-5 osv
men while-loop kör 100-99-98-97-96 osv

Hur vänder man på det ? Svaret finner du nedan, du ser även att vända while loop bakåt, tar mindre tid än att köra  for-loop  frammåt

 

var MAX:uint = 5000000; //5 miljoner gånger
var ARRAY:Array = new Array();
var st:Number = getTimer();
var UPP:uint = 0; // Variablen som vi ökar med en enhet vid varje loop körning
while ( UPP++ < MAX) {
 ARRAY.push (UPP);
}
trace ( getTimer() - st); //563 ms

Som du märker, while loop kan vara snabbaste sättet att loopa genom siffror.

 


Bedöm artikeln:
( 1 Bedömning )
Skapad 2010-02-28 02:41 av Danel Kirch

Visad 1358 gånger än så länge.
Taggad underforwhileloopiteration

Senaste artiklarna av Danel Kirch


Senast uppdaterad 2010-03-03 23:23

Lägg till kommentar


Medlemmar


Members Online: 0

Senaste registrerade

LisaRaichand : 22 april 2012 19:55pilu : 31 januari 2012 09:58Gostship99 : 07 januari 2012 19:37Director : 18 november 2011 05:44Dahlback : 17 november 2011 16:28mikwonwheels : 14 november 2011 13:20Kviddis : 04 oktober 2011 19:53buddha1966 : 25 september 2011 14:22idesign : 20 september 2011 08:45TxT : 05 september 2011 11:07ApelG : 05 september 2011 11:04
Partners
Adobe user group
fdt5-logo
TechSmith
Lynda user group
Apress user group
O´reilly user group
Peachpit user group
Friends Of Ed
Manning user group


Senaste blogginläggen

Av: Danel
-20.02.2012
Av: Patric Jonsson
-27.01.2012
Av: Patric Jonsson
- 3.01.2012
Av: Patric Jonsson
-29.11.2011
Av: Danel
-26.11.2011
Av: Patric Jonsson
-14.11.2011
Av: Patric Jonsson
- 8.11.2011
Av: Danel
- 7.11.2011
Av: Patric Jonsson
-27.09.2011

Senaste kommentarer

Senaste trådarna

Av Hallon
- 08/05/2012
Av goldensebbe
- 06/04/2012
Av Hallon
- 29/03/2012
Av buddha1966
- 06/03/2012
Av buddha1966
- 29/02/2012
Av Wide Circle
- 20/02/2012
Av zocstyle
- 15/02/2012
Av ufoalf30
- 05/01/2012
Av peterdavidsson
- 08/12/2011
Av JohnPaulie
- 03/12/2011
Av coffaldo
- 17/11/2011
Av buddha1966
- 05/11/2011
Av buddha1966
- 03/11/2011

Blogkalender

  • 2012 (3)
  • 2011 (37)
  • 2010 (85)
  • 2009 (18)
  • Vem är online

    Vi har 2014 besökare online
    RSS
    Danel Kirch
    RocketTheme Joomla Templates