【发布时间】:2013-07-28 01:03:41
【问题描述】:
如果我在DataGroup 中嵌入一些图像,如下所示:
[Embed(source="/assets/someimage.png")]
private var someimageClass:Class;
图片的嵌入次数是否与DataGroup 中的项目一样多?这会被认为是一种不好的做法吗?
【问题讨论】:
标签: actionscript-3 apache-flex embed
如果我在DataGroup 中嵌入一些图像,如下所示:
[Embed(source="/assets/someimage.png")]
private var someimageClass:Class;
图片的嵌入次数是否与DataGroup 中的项目一样多?这会被认为是一种不好的做法吗?
【问题讨论】:
标签: actionscript-3 apache-flex embed
图像是否会被嵌入与 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% 的误差范围内,您可以交换任意两个测试并获得大约 100 毫秒左右的相同时间,因此在您嵌入资产的方式上性能没有任何差异。
【讨论】: