Naar aanleiding van onder andere dit en de bij mij constant rijzende vraag wat nou de snelste constructies zijn in ActionScript, heb ik even een pagina aangemaakt met wat benchmarks. Ik weet niet of er ergens anders al een soortgelijk project bestaat, maar indien niet, dan ga'k er mss es wat extra moeite insteken.
Eerst even uitleg over hoe ik het heb aangepakt. Ik voer 1000x een stukje testcode uit dat ik time: dat is 1 run. Ik heb per stukje code dat ik wilde testen een overzicht gemaakt van 100 runs en geef per run ook aan hoeveel de gemiddelde run duurt over een venster van 10 runs (dus stel dat je run n bekijkt, dan zie je in de eerste kolom n staan, in de tweede de tijd die de run in beslag nam, en in de derde de gemiddelde tijde over runs n-10 t/m n).
De stukjes testcode die ik tot nu toe heb uitgevoerd zijn, staan in onderstaand stukje script (natuurlijk wel afzonderlijk gebenched), waarbij eerst de gebenchte code, daarna het gewogen gemiddelde over 100 runs, en tenslotte een omschrijving van de bench:
Hoe ik het benchen in ActionScript zelf heb gedaan, zie je bovenaan de pagina.
Ik trek uit de timings alvast de volgende conclusies:
Tenslotte nog een opmerking over de machinerie waar ik de boel op bench. 't Gaat om een goeie ouwe PII 400, niet fancy, dus de timings zijn niet erg snel.
Eerst even uitleg over hoe ik het heb aangepakt. Ik voer 1000x een stukje testcode uit dat ik time: dat is 1 run. Ik heb per stukje code dat ik wilde testen een overzicht gemaakt van 100 runs en geef per run ook aan hoeveel de gemiddelde run duurt over een venster van 10 runs (dus stel dat je run n bekijkt, dan zie je in de eerste kolom n staan, in de tweede de tijd die de run in beslag nam, en in de derde de gemiddelde tijde over runs n-10 t/m n).
De stukjes testcode die ik tot nu toe heb uitgevoerd zijn, staan in onderstaand stukje script (natuurlijk wel afzonderlijk gebenched), waarbij eerst de gebenchte code, daarna het gewogen gemiddelde over 100 runs, en tenslotte een omschrijving van de bench:
Flash ActionScript:
1
2
3
4
5
6
| v = "v"; // 74.74 ms, code 1: zonder declaratie van v var v = "v"; // 66.96 ms, code 2: inline declaratie v = "v"; // 74.13 ms, code 3: met declaratie van v (vooraf) v.text = "v"; // 95.84 ms, code 4: met initialisatie van v als Object in AS v.text = "v"; // 195.12 ms, code 5: met initialisatie van v als TextBox on scene v = "v"; // 77.25 ms, code 6: met v gebonden aan een TextBox |
Hoe ik het benchen in ActionScript zelf heb gedaan, zie je bovenaan de pagina.
Ik trek uit de timings alvast de volgende conclusies:
- Het gebruik van een inline declaratie gaat snel. Blijkbaar kijkt de AS-engine in dit geval enkel de lokale scope of zo. Het is iig het tegenovergesteld als wat in bv C++ gebeurt, waar afaik declaraties in een loop de boel vertragen.
- Het zetten van een variabele die aan een textbox gelinkt is, vertoont slechts een zeer lichte overhead (en ik twijfel zelfs hier aan, of het niet gewoon aan mijn wsch statistisch onverantwoorde aanpak ligt).
- Het zetten van een var in een object geeft een overhead tov rechtstreeks een var zetten, wsch doordat de AS engine nu 2 vars moet opzoeken (het object + zijn var).
- Een TextBox doet behoorlijk wat werk achter de schermen als je zijn text zet en verdubbelt de overhead tov het gewoon zetten van een object variabele.
code:
en 1
| x.i |
code:
Zodra ik er meer over weet, zet ik't hier neer.1
| x["i"] |
Tenslotte nog een opmerking over de machinerie waar ik de boel op bench. 't Gaat om een goeie ouwe PII 400, niet fancy, dus de timings zijn niet erg snel.
Wij onderbreken deze thread voor reclame:
http://kalders.be