А если так:

Код AS3:
var hash:Object = { obj: { obj: { value: 5 } } };
trace(hash.obj.obj.value);
var i:int;
var count:int = 1000000;
var value:int;
var startTime:int;
var props: Array;
startTime = getTimer();
i = count;
while (i--) {
try {
value = hash.obj.obj.value;
}
catch (error:Error) {
}
}
trace("Hit try: ", (getTimer() - startTime));
startTime = getTimer();
i = count;
while (i--) {
try {
value = hash.obj.obj.value.prop;
}
catch (error:Error) {
}
}
trace("Miss try: ", (getTimer() - startTime));
startTime = getTimer();
i = count;
props = ('obj.obj.value').split('[').join('.').split(']').join('.').split('.');
while (i--) {
value = getProperty(hash, "obj.obj.value", props);
}
trace("Hit getProperty: ", (getTimer() - startTime));
startTime = getTimer();
i = count;
props = ('obj.obj.value.prop').split('[').join('.').split(']').join('.').split('.');
while (i--) {
value = getProperty(this, "obj.obj.value.prop", props);
}
trace("Miss getProperty: ", (getTimer() - startTime));
То:
Hit try: 234
Miss try: 13595
Hit getProperty: 627
Miss getProperty: 695
В общем производительность оценить в AS3 на глаз (и даже такими синтетическими тестами) нереально, слишком много факторов не учитывается. Я возможно заменю "внутренности" getProperty на try/catch. Пока в раздумьях, просто я придерживаюсь мнения, что там где можно обойтись без ловли ошибок, нужно обходится...
Добавлено через 2 минуты
Цитата:
|
try/catch мне не нравится тем, что в строчке кода, которую я в него оберну, может содержаться совершенно другое RTE.
|
Совершенно с Вами согласен
Добавлено через 3 минуты
Цитата:
|
Я стараюсь не использовать его вообще нигде
|
Аналогично, согласен
Добавлено через 4 минуты
Цитата:
 Код AS3:
if (Props.getProperty("hash.value.value")) myValue=Props.value;
|
Такая запись затрудняет чтение. А вот так ли часто нужно знать если свойство, если его значение null?
Добавлено через 5 минут
Ну в общем я за производительность обеями ногами, как говорится копейка Гигагерц бережет)