コードの最適化[Actionscript]。

新しいプロジェクトを開始するたびに、私たちの多くは自分自身に質問をしますが、この部分またはコードのその部分を書く最善の方法は何ですか。 この記事では、ASでコードを最適化するためのフォーラムでの意見、ヒントを収集しようとしました。

これらのヒントがお役に立てば幸いです。

サイクル形成:
1)AS 3.0では、最速のサイクル
var i:int = 0
while(i <9999999){
i + = 1 //すなわちi + = 1
}

AS 3.0での入力により、非常に大きな加速があります。 AS 2.0では、これは観察されませんでした。

2)配列を実行するシーケンスに違いがない場合、ループを形成する最も速い方法は次のとおりです。
var i = my_array.length;
for(i-){
//ここで、配列要素my_array [i]に対するアクション
}

3)for ... inはforよりもはるかに遅いです。


以下の関数は、組み込みのArray.reverse()よりも40〜50%高速です。
関数リバース(a:配列){
var l = 0;
var r = a.length-1;
var t;
while(l <r){
t = a [l];
a [l] = a [r];
a [r] = t;
++ l;
--r;
}
}



ハッシュ、localvarハッシュ、このハッシュの順に実行されるため、速度が低下します。 もう1回実行します。 しかし、これとwithは変数だけでなく関数のキーでもあります。
オブジェクト{
...
}

(特にsv-youおよびオブジェクトのメソッドへの呼び出しが多数ある場合)、アルゴリズムの速度は大幅に低下します。
その使用を放棄する方が良いです。


大きなループでは、メソッドと...配列の使用を避けてください。

obj.x + = 1 //ここで、objは、正確なタイプvar x:Numberが宣言されているメンバーx //が宣言されているクラスのインスタンスです。

AS 3.0では、1桁速く動作します

obj ['x'] + = 1 //ここで、obj、配列

AS 1.0 / 2.0に違いはありません。


ローカル変数のハッシュへのアクセスは、グローバル変数へのアクセスよりも高速です。サブハッシュ検索が使用される場合はさらに高速です。 したがって、関数の引数を使用してデータを転送すると、すべてが高速になります。 ハッシュは、構成された単一の変数から取得されます。 一般に、ローカル変数はより速くアドレスされます。


ハッシュアドレスを格納するための中間変数を作成することをお勧めします。 つまり、タイプの反転
xxx.tr.mx.v + = xxx.tr.mx.dv

以下につながる方が良いです:
var mx:Object = xxx.tr.mx;
mx.v + = mx.dv;

それにより、2つのハッシュ検索を取り除きます。 もちろん、すべてがフラッシュで最適化されますが、巨大な配列をシャベルで処理する場合、ハッシュインデックスを実行するたびにブレーキがかかります。


Array.lengthはオタクなので、ループを開始する前にまず変数の長さを調べるのが最善です。


Math.randomはrandomより2-3倍遅いです。


a = b = c = 0はa = 0よりも高速です。 bは0です。 c = 0;。


Key.isDown(Key.SPACE)は、Key.isDown(32)よりも低速です。


これを使用しないでください。


4番目のFlash構文は、「。」を使用して呼び出すよりも高速です。


ローカル変数var Mpi = Math.PIに定数関数を保存します。


varを使用して変数を定義します。


i + = 1およびi- = 1の代わりにi ++およびi--を使用します。


可能な場合は、+の代わりに使用します。


MCの座標の決定は、この方法ではるかに速く決定されます。
backgroundMC._x = int(computedXposition);
backgroundMC._y = int(計算された位置);

よりも:
backgroundMC._x = computeXposition;
backgroundMC._y = computeYposition;


アドオンがあれば、他の人と共有できます。

Source: https://habr.com/ru/post/J2964/


All Articles