大きく4つの方法が考えられる。
方法1:最も古典的(?)な方法
for (var i:int = 0;i < arr.length;i++)
方法2:arr.lengthをfor文の外に出した方法。
var length:int = arr.length;
for (var i:int = 0;i < arr.length;i++)
方法3:for each文を使った方法
for each(var i:int in arr)
方法4:Array.forEachを使った方法
arr.forEach(...);
それぞれの処理スピードを比較してみた。方法1が一番遅いので、それと比較してどの程度速いかを以下に示す。
方法2:18%速い |
方法3:15%速い |
方法4:33%速い |
考察
ActionScriptでは、Array.lengthプロパティが遅い事はよく知られている。なので、これをfor文の中で利用するとループが極端に遅くなる。これが、方法1が遅い理由だ。なぜ、Array.lengthが遅いのかはわからない。方法2が存在する理由もここにある。方法3は方法2より速いと思われたが、結果は予想に反していた。方法3の方が、可読性に優れている気もするが、スピードを気にするなら方法2や方法4を選んだ方がいいようだ。方法4は予想通り最も速かった。
イテレーションをする場合、単にスピードだけでなく、その中で何をするかによっても、選ばれる方法は変わってくる。今後はこれを参考に方法を選びたいと思う。
0 件のコメント:
コメントを投稿