Мальчик, кажется, мы можем написать книгу на эту тему. Или хотя бы главу. Мы узнали немало вещей в этой области, когда разрабатывали наши продукты.
Итог - да, Flex замедлится, когда вы добавите более 1000 «вещей» на экран. Вот несколько пунктов и несколько повторений того, что уже упоминалось (просто для краткости)
1) Всегда рисуйте только то, что видно. Ханс Мюллер (Hans Muller), архитектор новой Spark DataGrid, отлично работает над ViewPorts. http://hansmuller -flex.blogspot.com / 2009/06 / введение к видовым-и-scrolling.html . Таким образом, создайте достаточно «ячеек», чтобы заполнить видимую область, и в основном перерабатывайте их по мере прокрутки пользователем.
2) Recycle, recycle, recycle: В дополнение к вышесказанному, когда пользователь выполняет прокрутку, вам, очевидно, придется перерабатывать ячейки, которые теперь не видны, чтобы показать те, которые находятся на виду. Здесь есть несколько вещей, которые мы выучили трудным путем :-)
-> Вместо того, чтобы располагать и создавать новые ячейки, либо используйте переопределение, либо используйте репозиционирование (предпочитайте репозиционирование)
Что это означает: скажем, у вас есть сетка 10X10 (видимая), показывающая поставщика данных 100X100. Когда пользователь прокручивает до ячеек 20X20, самый быстрый способ будет установить X и Y существующих ячеек на новые местоположения, а затем вызвать набор данных для каждого. Мы использовали репертуар раньше, потому что наш сценарий представлял собой серию связанных контейнеров, поэтому это может не относиться к вам. Но суть - мы просто перемещаем «ряды» вокруг видимой области. Таким образом, создание и уничтожение будут выполняться медленнее, удаление и добавление в список экранных объектов будет выполняться быстрее, а простое перемещение (x, y) будет самым быстрым.
3) Выберите то, что унаследовано от вас: Flex SDK - это чудовище. Так что выбирайте свой базовый класс "ячейки" с умом. Например, DataGrids SDK имеют облегченный рендер, который наследуется от UITextField (Halo), в отличие от Label. Даже UIComponent будет тяжелым в определенных сценариях. Посмотрите asdocs для UIComponent и посмотрите, нужно ли вам все там, иначе рассмотрите возможность наследования от дальнейшей иерархии.
4) Вычисления кеша: делайте это последним в цикле разработки. Как только вы закончите с функцией, запустите Flex Profiler. Определите самые длительные методы и наиболее часто вызываемые методы. Мы всегда делаем это, когда выпускаем, потому что всегда есть улучшения, которые нужно сделать. Когда вы разрабатываете визуальный компонент, требуется много математики, а слишком большое количество вычислений замедляет процесс.
5) Убедитесь, что вы профилируете для памяти: несвязанные прослушиватели событий, мошеннические ссылки на объекты и т. Д. Снижают производительность. Flex profiler - отличный инструмент для борьбы с этим, поэтому обязательно используйте его.
У нас есть несколько хороших ссылок здесь:
http://www.flexicious.com/resources/Ultimate/Docs/LargeDataset.htm?
Надеюсь, это поможет!