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