В воспалённом мозгу родился вопрос, что быстрей в Scaleform доступ к элементам массива по ключу или доступ к элементам словаря по ключу, в последнем случае ключём выступают объекты.
Накидал следующий тестовый классец:
import flash.utils.Dictionary; import flash.utils.getTimer;
var d:Dictionary = new Dictionary(true);
var a:Array = [];
var n:Array = [];
var ob:Object;
for (var i:int = 0; i < 10; i++) {
a.push(i);
this['item'+i] = {id:i};
ob = this['item'+i];
n.push(ob);
d[ob] = i;
}
var t:int = getTimer();
var r:int = 0;
for (i = 0; i < 300000; i++) {
for (var j:int = 0; j < 10; j++) {
r += a[j];
}
}
trace(getTimer() - t, r);
r = 0;
t = getTimer();
for (i = 0; i < 300000; i++) {
for each (ob in n) {
r += d[ob];
}
}
trace(getTimer() - t, r);
Флеш радостно показывал в логах следущее:
29 13500000 230 13500000
Видим что доступ к элементам массива по ключу гораздо быстрей отработал в описанном выше кейсе.
Запускаем Scaleform Player… и о чудо видим:
1072 13500000 1124 13500000
Жалкое зрелище, душераздирающее зрелище. Но можно сделать вывод, что в Scaleform скорость доступа по ключу к элементам массива сравнима по скорости доступа по ключу (объекту) к элементам словаря. Чем я и воспользуюсь в одном интересном кейсе =)