(Возможно, нубский вопрос, но...) Я пытаюсь написать пользовательский компонент, который по существу содержит довольно большую таблицу (максимум это должно быть 800 x 35 полей, из которых только до 20 x 10 видны на время). Мне было интересно, может ли кто-нибудь дать мне несколько советов/советов, как это сделать оптимальным образом.
Что я сейчас использую: компонент расширяет UIComponent
, у меня есть настраиваемая полоса прокрутки и я использую новый spark.components.Label
в качестве текстового контейнера для каждого поля в таблице. Я поместил метки внутрь другого UIComponent
, чтобы скрыть края меток за пределами области отображения. Я пытался:
- Рисовать только те данные, которые содержатся в области отображения. Когда пользователь перемещает полосу прокрутки, данные перерисовываются, однако, поскольку
Labels
все еще много, компонент немного тормозит. - Нарисуйте всю таблицу и используйте положение маски/контейнера, чтобы показать только часть таблицы, представленную положением ползунков. Однако рисование занимает много времени и, как я полагаю, может использовать много памяти.
- (Current idea) Multithreading. This is completely new for me, so I have set up a background
Worker
and want it to return anUIComponent
with the table drawn, while the user can continue interacting with other parts of the component. So here come my questions:- So far I am having trouble transferring
UIComponent
usingMessageChannel
. Is such a transfer usingMessageChannel
possible in the first place or should I use alternative approach? - Есть ли альтернативный подход для подобных случаев? Может быть, мне следует использовать разные контейнеры для самого текста/таблицы?
- Может быть, мне следует использовать фонового рабочего для рисования BMP и использовать его вместо
UIComponent
. Если это так, может быть, кто-нибудь может порекомендовать мне хороший учебник или руководство, как это сделать?
- So far I am having trouble transferring
Спасибо за помощь и дайте мне знать, если вам нужна дополнительная информация.
-Вил
List
илиGrid
? Это именно то, для чего эти компоненты были оптимизированы. Для лучшей производительности вам необходимо виртуализировать макет, рисовать только тот макет, который находится в поле зрения, и использовать объединение/переработку элементов, чтобы избежать высокой стоимости строительства. Это вещи, которые уже встроены в компоненты на основе списков Flex. ИспользованиеWorker
является распространенной идеей, но на самом деле не работает для оптимизации отображения, поскольку рабочие не могут обрабатывать объекты отображения. Это больше для тяжелых операций с данными, таких как кодирование и декодирование байтовых массивов. - person Aaron Beall   schedule 30.07.2015