Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Пути повышения производительности визуальных компонентов (http://www.flasher.ru/forum/showthread.php?t=121975)

: hr : 27.02.2009 18:45

Пути повышения производительности визуальных компонентов
 
Друзья, в контейнер в рантайме необходимо добавить достаточно большое количество дочерних компонентов, например 100 (к примеру 100 Panel'ей). Этот процесс занимает приличный промежуток времени - более секунды. Вопрос - можно ли как-то штатными средствами флекса ускорить это дело? Каким-то образом может быть заблокировать компонент на перерисовку до окончания добавления всех дочерних? Или есть иные способы (кроме, конечно, очевидного добавления дочерних компонентов порциями по несколько штук). Подскажите пожалуйста...

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" horizontalAlign="left">
<mx:Script>
<![CDATA[
import mx.containers.Panel;
 
private var l_t:Number;
 
private function init():void {
 
l_t = new Date().getTime();
 
var l_p:Panel;
 
for (var i:int = 0; i < 120; i++)
{ l_p = new Panel();
 
l_p.x = 80 * i;
 
cv.addChild(l_p);
}
}
private function created():void
{
var l_2:Number = new Date().getTime();
trace(l_2 - l_t);
}
]]>
</mx:Script>
<mx:Button click="init()" ></mx:Button>
<mx:Canvas id="cv" updateComplete="created()" width="500" height="300"></mx:Canvas>
</mx:Application>


wvxvw 27.02.2009 19:03

Э... чего? Зачем такое безумное количество панелей? Вы же понимаете, что 1 панель - это уже куча спрайтов + довольно много кода только для инициализации... тут проблема не в добавлении, их создать в таком количестве уже быстро не получится...

: hr : 27.02.2009 19:24

Конкретно в моем случае не панели конечно, а подобные конструкции (просто контейнер с рамкой, внутри которого пару текстовых полей):

Код AS3:
<mx:VBox>
<mx:Canvas>
<mx:Label>
<mx:Label>
</mx:Label>
</mx:Label>
</mx:VBox>
</mx:Canvas>

wvxvw 27.02.2009 20:07

Ну, если чесно, то ничем не лучше... Бокс - уже пару спрайтов, вы в него еще канвас запихнули - это еще + пару спрайтов + еще пару текстовых полей. А теперь умножьте... и добавьте к этому всему код нужный для инициализации каждого элемента... Не знаю, я бы старался избегать подобных ситуаций... ну или если так уж припрет показать одновременно несколько сотен отдельных текстовых полей, то, наверное, не использовал бы лейблы, а текстовые поля... ну и вообще постарался бы добиться подобного эффекта используя минимум элементов - форматируя одно текстовое поле например, вместо создания множества и т.п. Вообще, как вы себе представляете интерфейс пользователя состоящий из сотен компонентов? Пользователь поседеет пока научится им пользоваться :)

: hr : 28.02.2009 12:40

Такой интерфейс пользователя взят из канонического примера Flex-приложения. Визуальный компонент, представляющий thumbnail товара имеет как раз подобную структуру. Вопрос в том, может ли флекс помочь мне в реальном деле создания подобного интерфейса магазина, где сотня товаров?

etc 28.02.2009 13:04

Сотня мало. Берите тысячу. Тайллист вам нужно писать такой, который отображает ровно то, что есть на экране и подменяет данные в каждом item-е при скроллинге, не меняя набор item-ов вовсе.

: hr : 28.02.2009 17:10

__etc, спасибо, понятно.


Часовой пояс GMT +4, время: 12:44.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.