次のように画像を埋め込む場合DataGroup
:
[Embed(source="/assets/someimage.png")]
private var someimageClass:Class;
にあるアイテムの数だけ画像が埋め込まれDataGroup
ますか? それは悪い習慣と見なされますか?
次のように画像を埋め込む場合DataGroup
:
[Embed(source="/assets/someimage.png")]
private var someimageClass:Class;
にあるアイテムの数だけ画像が埋め込まれDataGroup
ますか? それは悪い習慣と見なされますか?
画像は DataGroup 内の項目の数だけ埋め込まれますか?
いいえ、画像は一度だけ埋め込まれます。名前でアクセスできますItemRendererName_someimageClass
。アイテム レンダラーのクラス名をTT
次のように考えてください。
trace(getDefinitionByName("TT_someimageClass"));
trace(ApplicationDomain.currentDomain.getDefinition("TT_someimageClass"));
出力:
[class TT_someimageClass]
[class TT_someimageClass]
それは悪い習慣と見なされますか?
AS3 のコード スタイルの規則 (多くのオープンソース プロジェクト、as3 livedocs の例、および flex で使用されているもの) によると、アセットを埋め込む一般的な方法はpublic static const
、パブリック アセットとprivate static const
プライベート アセットに使用することですが、すべての間でアクセス パフォーマンスに違いはないようです。このような場合は、このベンチマークをチェックしてください。
package
{
import flash.display.Sprite;
import flash.utils.getTimer;
public class astest extends Sprite
{
public function astest()
{
var tt1:TT = new TT();
var clazz:Class;
var t:uint, i:int;
t == getTimer();
for(i = 0; i < 100000; i++)
clazz = TT.someimageClass2;
trace("static var:", (getTimer() - t), "ms");
t == getTimer();
for(i = 0; i < 100000; i++)
clazz = TT.someimageClass3;
trace("static const:", (getTimer() - t), "ms");
t == getTimer();
for(i = 0; i < 100000; i++)
clazz = tt1.someimageClass;
trace("var:", (getTimer() - t), "ms");
t == getTimer();
for(i = 0; i < 100000; i++)
clazz = tt1.someimageClass1;
trace("const:", (getTimer() - t), "ms");
var cache:Class = tt1.someimageClass;
t == getTimer();
for(i = 0; i < 100000; i++)
clazz = cache;
trace("cache:", (getTimer() - t), "ms");
}
}
}
package
{
public class TT
{
[Embed(source="vogel_small.jpg")]
public var someimageClass:Class;
[Embed(source="vogel_small.jpg")]
public const someimageClass1:Class;
[Embed(source="vogel_small.jpg")]
public static const someimageClass2:Class;
[Embed(source="vogel_small.jpg")]
public static var someimageClass3:Class;
public function TT()
{
}
}
}
出力:
static var: 85 ms
static const: 94 ms
var: 102 ms
const: 110 ms
cache: 118 ms
すべての結果は 10% の誤差の範囲内です。任意の 2 つのテストを入れ替えて、約 100 ミリ秒の同じ時間を得ることができるため、アセットを埋め込む方法によるパフォーマンスの違いはありません。