繁体   English   中英

在Flex的ItemRenderer中嵌入图像

[英]Embedding images in ItemRenderer in Flex

如果我将一些图像嵌入到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%的范围内,您可以交换任意两个测试并获得大约100ms的相同时间,因此在嵌入资产方面,性能没有任何差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM