В воспалённом мозгу родился вопрос, что быстрей в 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 скорость доступа по ключу к элементам массива сравнима по скорости доступа по ключу (объекту) к элементам словаря. Чем я и воспользуюсь в одном интересном кейсе =)