我有一个Spark列表,我在其中手动添加自定义组件(没有项呈示器)。一切都工作正常,除非我在列表中添加数百个项目(基于几个计算),渲染时间增加到几秒钟。
我的问题是:
我希望我所要求的是有道理的。我很确定渲染时间在增加,因为我在自定义组件中有很多组件。我只需要回答一下我的问题。
答案 0 :(得分:1)
Flex组件根据Flex生命周期在列表中呈现:http://help.adobe.com/en_US/flex/using/WS460ee381960520ad-2811830c121e9107ecb-7fff.html
列表可能运行缓慢有两个原因,您的组件可能无法正确遵循Flex生命周期,第二个原因是您的列表未启用虚拟布局。
首先是艰难的:
您的第一步应该是确保您在commitProperties()
,measure()
和updateDisplayList(unscaledWidth:Number, unscaledHeight:Number)
的自定义组件中遵循正确的阶段。
只要你没有在你的UIComponent子类或LayoutManager上调用任何名为validateNow()
的方法,那么你的组件应该遵循这个就好了。
第二个可能是你的列表布局没有使用虚拟布局。默认情况下,这在Spark List组件中启用,但是如果要覆盖布局,则应确保在您使用的任何布局上将useVirtualLayout
设置为true。
这样可以加速渲染Spark DataGroup组件中的许多项(List是): http://help.adobe.com/en_US/flex/using/WSc2368ca491e3ff92-1483ec4a12136246e76-8000.html#WS685c4ccbb85d340c6617851e121d4b8abae-8000
答案 1 :(得分:1)
还有一件事需要知道,
ActionScript 3基于偶数驱动在Flash播放器上运行。这意味着如果你在阻塞中运行一大块代码,那么在代码结束之前,其他任何东西(包括渲染)都不会被执行。
此设计有时会导致问题:如果开发人员在一个阻止功能中添加了太多作业,则播放器会暂时冻结并且无响应。 (如果代码是无限循环,它将停止,直到玩家检测到并抛出ScriptTimeoutError,或者可能永远。)
但是,对于您的问题,是的,在添加作业完成之前,任何内容都会被延迟。 Flex组件基本上不会自动拆分作业。