首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

FLEX TREE XML大数据量异步处理,该如何处理

2012-03-18 
FLEX TREE XML大数据量异步处理一个包含大量数据的XML,比如:treeNodestreeNodeid001/idname全国

FLEX TREE XML大数据量异步处理

一个包含大量数据的XML,比如:
<treeNodes>
<treeNode><id>001</id><name>全国</name><pID>-1</pID> <nodeType>area</nodeType><imgURL></imgURL><modifyDate>123</modifyDate><checked>2</checked><temp>11</temp><isLeaf>0</isLeaf></treeNode>

<treeNode><id>002</id><name>江苏</name><pID>001</pID><nodeType>area</nodeType><imgURL> </imgURL><modifyDate>123</modifyDate><checked>2</checked><temp>11</temp><isLeaf>0</isLeaf></treeNode>

<treeNode><id>012</id><name>南京</name><pID>002</pID><nodeType>area</nodeType><imgURL> </imgURL><modifyDate>123</modifyDate><checked>2</checked><temp>11</temp><isLeaf>0</isLeaf></treeNode>
</treeNodes>
转换成FLEX TREE需要的XML并显示时需要处理很长时间。这段时间内会造成页面卡死。
请教各位牛人有什么办法可以对数据进行异步处理并显示到TREE吗

[解决办法]
我遇到过这样的情况。。。并不是页面卡死,而是页面没有刷新。。。
刷新一下就ok了。。
[解决办法]
瓶颈可能出现在服务器响应这一块,造成的假死,
建议,分级加载数据先加载省一级,当点省一级再加载市一级依次类推,
编程稍微要复杂一些了
[解决办法]
flex的XML,目前我是觉得不是很成熟的,有些细节如果没注意,当数据大一点时会导致性能非常慢,我说一下我所知道的一些地方吧:
1、for循环,当结点数量大时,千万不要用for(var i:int=0; i< xmllist.length(); i++),
而是用for(var i:int=0,nLen:int= xmllist.length();i < nLen;i++ ), 原因是前者每次循环都会执行一次i< xmllist.length(),而xml的length()是一个消耗很大的方法,特别是在数据量大的时候,我原来做的试验好像是,如果前者要10秒执行,后者几乎不到1秒(差太多...);
2、取控件的dataProvider的时候,不要使用XMLList(dg.dataProvider)或dg.dataProvider as XMLList,dataProvider本质上一个Collection,这样会造成强制转换成另一个对象,效率也是很低的,最好是使用XMLListCollection(dg.dataProvider).source;
3、如果XML数据大(并且结构复杂),不要使用XML的.和..查询(特别是要反复查询的时候),这两个查询符都是递归,一个是浅递归,一个是深递归,比较好的办法是通过map(Object)查询,将每一个XML结点都放到map中的一个key中,key用一个唯一ID或者数据的UID都可以的。

热点排行