actionscript中更快的普通对象或强类型对象是什么?

时间:2010-02-15 23:14:53

标签: flex actionscript

所以

public var user:Object = {}; 
user["firstName"] = "Bill";
user["lastName"] = "Cosby";

比我有像User这样的值对象慢吗?

var user:User = new User();
user.firstName = "Bill";
user.lastName = "Cosby";

2 个答案:

答案 0 :(得分:6)

比任何速度优势更重要的是,强类型提供了编译时类型检查,因此您不会输入错误的属性名称 - 节省了大量的开发人员时间,这比时钟周期贵得多

尽管如此,静态打字确实也带来了速度优势。

答案 1 :(得分:6)

public function speedTest():void               
{            
    var typedObjects:Array = [];
    var dynamicObjects:Array = [];
    var typedObject:User;
    var dynamicObject:Object;
    var i:int = 0;
    var n:int = 10000;
    for (i; i < n; i++)
    {
        dynamicObject = {};
        dynamicObjects.push(dynamicObject);
        typedObject = new User();
        typedObjects.push(typedObject);
    }
    // typed
    var time:int = getTimer();
    i = 0;
    n = 10000;
    for (i; i < n; i++)
    {
        typedObject = typedObjects[i];
        typedObject.firstName = "Bill";
        typedObject.lastName = "Cosby";
    }
    var end:int = getTimer() - time;
    trace("TypedObject Time: ", end/1000, "sec");

    // untyped
    time = getTimer();
    i = 0;
    n = 10000;
    for (i; i < n; i++)
    {
        dynamicObject = dynamicObjects[i];
        dynamicObject["firstName"] = "Bill";
        dynamicObject["lastName"] = "Cosby";
    }
    end = getTimer() - time;
    trace("DynamicObject Time: ", end/1000, "sec");
}   

简单速度测试显示TypedObject(User)比UntypedObject({})大约快3-3.5倍,但是在日常生活中你没有注意到它。试试Grant Skinner's Performance Test Harness来运行一些更好/更高级的测试:)。

3个简单的试运行:

TypedObject Time:  0.002 sec
DynamicObject Time:  0.007 sec
TypedObject Time:  0.002 sec
DynamicObject Time:  0.006 sec
TypedObject Time:  0.002 sec
DynamicObject Time:  0.006 sec

结论:Typed比Untyped快。