Flex性能优化之cpu占用率

Flex性能优化之cpu占用率

先扯几句,team中有一个正在试运行的项目,最近被客户打了回来,问题在于flex的性能问题。症状如下,当as的service层去调用后台java servlet时,ui会弹出一个反复播放的loading动画,回调函数取得数据后进行解析,然后重绘ui。这是一个被大家普遍使用的loading+异步的客户端处理方式。但是问题在于,当执行回调函数时,本该重复执行的动画,出现了停顿状态(如果从调用到显示需要花费6秒,那么这个停顿可能就要占掉3秒),而且整个载入时间也偏长,严重影响了客户体验。

 

为了解决这一问题,走了不少弯路,一些可能的原因被一一排除,但是还是找不出问题所在。幸好在群友飞翔大师的提示下,把问题圈定在浏览器占用cpu过高,造成浏览器假死这一情况。一下是我排查及解决思路,希望能对大家有帮助

1、因为是cpu占用率过高引起,毋庸置疑肯定是代码造成的,于是启动从来没用过的flex profile工具来查找罪魁祸首method

选择你要检测的app后,切换到profile视图

这个对话框是让你选择监控方式,上面是内存使用情况,下面是性能(执行所花费时间)

点击按钮。

双击performance profile,会将所有初始化时执行的到函数性能都罗列出来

找到耗时最多的那个你自己写的method,就是我们要下手的目标(上图已经是优化后的截图了。之前某个method要占用1800ms左右时间)

切入代码一看,乖乖!原来是2层for循环搞得鬼,这2次循环遍历服务器返回数据然后,把他们拼装成as3的vo对象。new了成千上万个对象。cpu这么折腾一下占用率不飙上去就怪了。

解决思路,as3里没有线程概念,故不能让for循环再执行的时候来个sleep()让cup喘口气,因此我们需要借助Timer类来帮我们实现cpu喘息的功能。

Timer类的使用大家查查api应该都清楚了,new Timer(执行间隔,执行次数)。我们可以让第一层for循环转变为一次timer操作,执行次数即for的length,执行间隔即你想让cpu喘息的时间。然后再将一些变量设置成static就能替代我们的第一层for循环的功能。

ok,调优完毕,进行测试,果然cpu使用率下来了,而且动画不会产生明显的停顿,再用profile一监控,发现这一步操作由原来的1800ms降低到800ms,还节省了1秒时间,(可能是让cpu缓和一下,执行效率反而高吧)

大家在项目中遇到处理大型后台数据时,也可以借鉴这个思路,如果你由更好的解决方案,也希望一同分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值