注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Flex 技术博客

醉里挑灯看剑,梦回吹角连营

 
 
 

日志

 
 

提高flex性能之itemRenderer篇  

2008-04-18 03:33:43|  分类: Flex 应用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

好久没有更新我的技术贴了,上个礼拜刚刚去了趟New York,感觉时间紧迫,再过2个礼拜就回国了,突然发现很多地方都没有玩过,也是不巧,这一个月来Boston一到周末就阴天下雨,似乎来的不是时候,闲话少说,还是开始我们的正题。

之前我有总结过如何提高flex性能的文章,最近又碰到一个问题,就是对大批量数据的时候DataGrid中采用很多itemRenderer,性能将是一个大问题。于是寻找有关权威文章,期望能有所收获。在Peter Entblog上还是得到了不少帮助,原文是英文,也有人做过翻译,我这里就简单提取一部分仅供参考。需要详细,建议查看原文。

当我们在用itemRenderer显示大量数据的时候,无论是在DataGrid或者是AdvanceDataGridFlex3),如果我们的itemRenderer效率低下,那么整个系统的性能将大受影响。这里列出几个比较好的建议:

  1. 尽量少用itemRenderer,这个没什么说的,能不用的尽量别用。
  2. 不要频繁的更改itemRenderer的风格change style。也就是很多人喜欢的setStyle(‘’,’’),比如更具数据变化背景颜色之类的,其实这个是很要命的,数据量小没什么感觉,数据量大了,效果就出来了。这个我在之前的文章也提到过这一点。其实可以有其他方法替换,后面详细讲。
  3. 尽量不要用容器Cantainer作为itemRenderer的基类。也就是我们常用的HBoxVBox,我的建议是宁愿用Canvas也不要用前者。至于原因将起来就复制一些。如果对高级flex开发人员来讲,我们应该尽量用UIComponent,作为基类,也就是所有界面元素的父类。

不用setStyle方法的替代法

这里有个很好的例子,就是根据所在列的数据来变更具体要显示的控件,以此来达到变换背景色的目的。

<mx:Canvas>

    <mx:Script><![CDATA

        private function lessThanZero() : Boolean {

           return data.price < 0;

        }

    ]]></mx:Script>

    <mx:Label text="{data.price}" color="#FF0000" visible="{lessThanZero()}" />

    <mx:Label text="{data.price}" color="#00FF00" visible="{!lessThanZero()}" />

</mx:Canvas>

这种方法可比setStyle来得快多了,但是在程序设计上稍显麻烦。

这里还需要注意的几点:

  • 避免把风格和数据进行绑定,数据随时在变,style也随时在变的话可以想想它的性能。
  • 采用Canvas或者继承ListItemRenderer来作为itemRenderer的主容器,这样便于你自己对各个空间进行控制

另外如何采用UIComponent作为itemRenderer的容器基类,有兴趣的朋友可以参考原文,这里不做翻译和解释,原文其实讲的很明白了。

  评论这张
 
阅读(2701)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017