page_adsence

2010年6月19日土曜日

AS3のループ処理のコストに関して

XMLファイルに書かれている内容を順番に取り出そうと思ってループ処理について調べてみた。

まず書き方。
Arrayクラスの場合(JavaScriptとかと同じ)
arrayName:Array = new Array();
arrayName:Array = [];


Vectorクラスの場合
arrayName:Vector.<typeName> = new Vector.<typeName>();


正直このVectorクラスの書き方は違和感ありまくりです。
ちょっと疑問に思ったのはVectorクラスの場合、短縮形の書き方ないのかなぁ。
調べた感じでてこなかったし、試しに[].<typeName>;って書いてみたけど見事にエラーになったから無理なのかも。ちょっと残念。

次に速度。
wonderflにベンチマークがありました。
for inとfor each inではfor each inの方が早いみたいですね。
ただしfor each inは配列のキーが取得できないので、もしキーが必要な場合は必然的にfor inを使う必要があります。

また、ArrayクラスとVectorクラスでも速度が変わってきます。
Vectorクラスは1つのデータ型のみ格納可能で、0から順に格納することしかできませんが、その分高速に動きます。
なので、優先順位としてはまずVectorクラスを、無理であればArrayクラス使うように癖をつけた方がよい。

今回のXMLファイルのロードに関してはURL:Stringを配列に突っ込むだけの処理だったので、
一番高速なVectorクラスにfor each inで値を格納してみました。
一応理論上は高速なはず。