flex 3: кто-нибудь может мне помочь оптимизировать этот массив -> функцию arrayCollection? - PullRequest
1 голос
/ 03 мая 2011

Я использую родительский элемент для передачи многомерного массива дочернему элементу.Структура массива с именем projectPositions выглядит следующим образом (с примерами данных):

projectPositions[0][0] = 1;
projectPositions[0][1] = 5;
projectPositions[0][2] = '1AD';
projectPositions[0][3] = 'User name';

Мне нужно взять этот унаследованный массив и превратить его в arrayCollection, чтобы я мог использовать его в качестве dataProvider.В настоящее время моя функция инициализации (которая выполняется onCreationComplete) содержит этот код для выполнения этой задачи массива -> arrayCollection:

for (var i:int = 0; i < projectPositions.length; i++)
{
tempObject = new Object;
tempObject.startOffset = projectPositions[i][0];
tempObject.numDays = projectPositions[i][1];
tempObject.role = projectPositions[i][2];
tempObject.student = projectPositions[i][3];
positionsAC.addItemAt(tempObject, positionsAC.length);
}

Затем, во время ретранслятора, я использую позиции AC в качестве источника данных и ссылаюсь на элементыследующим образом:

<mx:Repeater id="indPositions" dataProvider="{positionsAC}" startingIndex="0" count="{projectPositions.length}">
    <components:block id="thisBlock" offSet="{indPositions.currentItem.startOffset}" numDays="{indPositions.currentItem.numDays}" position="{indPositions.currentItem.role}" sName="{indPositions.currentItem.student}" />
</mx:Repeater>

Все это прекрасно работает и возвращает желаемый эффект, но время загрузки этого приложения составляет около 10 секунд.Я на 99% уверен, что время загрузки вызвано массивом -> arrayCollection for loop.Есть ли более простой способ достичь желаемого эффекта, не дожидаясь загрузки страницы?

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Проблема, связанная с загрузкой элементов, может заключаться в том, что вы используете ретранслятор вместо класса списка.

При использовании повторителя в памяти будет создан блок, нарисованный на экране. Итак, если у вас есть 100 элементов в вашем массиве, то будет создано 100 блоков. это может замедлить как первоначальное создание, так и общее приложение.

Класс, основанный на списке, фокусируется на технике, называемой переработкой рендерера; Это означает, что только отображаемые элементы создаются и отображаются на экране. Таким образом, в зависимости от настроек у вас обычно будет 7-10 экземпляров «блоков» на экране, независимо от того, сколько элементов в вашем массиве.

0 голосов
/ 03 мая 2011

изменить

positionsAC.addItemAt(tempObject, positionsAC.length);

на

positionsAC.addItem(tempObject);

addItemAt вызывает переиндексацию коллекции, которая может значительно замедлить коллекцию.

[EDIT] Поместите этооператор трассировки до и после цикла возьмет выходные данные и вычтет одно из другого, и это покажет, сколько миллисекунд выполнено циклом.

var date:Date = new Date( );
trace( date.getTime())
...