显示服务器端大量数据之效能贴士 Performance Tips for Displaying Large Volume of Data from Server...

本文介绍在使用DataGrid展示大量数据时提高性能的方法。通过禁用自动更新或预填充数据集合来减少刷新次数,从而显著提升加载速度。
[url]http://riashanghai.com/zh-hant/node/97[/url]
当需要显示从服务器端传来的大量数据的时候, 我们可以使用DataGrid datagrid为UI, 其data provider 为一个ArrayCollection:

var datagrid:DataGrid = new DataGrid();
datagrid.dataprovider = new ArraryCollection();

服务器传过来海量数据时我们可以这样来做:

for each object { // replace 'for each object' with your own real code
ArrayCollection(datagrid.dataprovider).addItem(object);
}

从效能角度来说, 上面的代码是有问题的 - 每一个addItem呼叫后datagrid将进行一次刷新, AS可以在一秒钟执行上万个addItem操作, 但执行一万次刷新则花费很多时间. 有两个解决方案:

方法一: 使用ArrayCollection.disableAutoUpdate():

ArrayCollection(datagrid.dataprovider).disableAutoUpdate():
for each object {
ArrayCollection(datagrid.dataprovider).addItem(object);
}
ArrayCollection(datagrid.dataprovider).enableAutoUpdate();

这样即便上万个addItem操作, 刷新仅有一次.

注意: disableAutoUpdate/enableAutoUpdate必须成对呼叫 - 若呼叫两次disableAutoUpdate, 再呼叫一次enableAutoUpdate, 这时不会有刷新; 你必须呼叫第二次enableAutoUpdate.

方法二: 将数据预先放到一个ArrayCollection里面, 然后将其set为dataprovider的list. 如果这样, dataprovider就不必为ArrayCollection了, 而是ListCollectionView:

datagrid.dataprovider = new ListCollectionView();

var myAC:ArrayCollection = new ArrayCollection();
for each object {
myAC.addItem(object);
}
ListCollectionView(datagrid.dataprovider).list = myAC;

这样刷新也仅有一次.

方法一适用于dataprovider是自定义的class(一般extends ArrayCollection), 其实disableAutoUpdate(),enableAutoUpdate()及数据操作完全可以在这个自定义class里面执行;

方法二适用于较为简单的情况;

不必使用方法一或者方法二的情况: 当所需要操作的ArrayCollection并没有任何Event Listener的时候, 我们不必考虑其产生的Event. 一个ArrayCollection被设为DataGrid的dataprovider的时候, DataGrid会add event listener到ArrayCollection上, 这就要面对上面所提到的效能考量了.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值