- 浏览: 122418 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yanmie:
您的文章已被本站收录地址:http://www.airmyth ...
开源媒体框架(OSMF)的介绍和概况:下 [译] -
wjc_andy:
大神 能把源文件发来看看么
从网页安装和运行AIR 应用程序系列(系列二) -
tanni:
注意:现在XML需用2.5,且XML的版本号要与APP.XML ...
AIR 自动更新详解 -
cvpc:
先谢过,试试好不好使
AIR 自动更新详解 -
fins:
引用
今年将推出 AIR 2.0 桌面版, AIR IPhon ...
Adobe AIR Openscreen 启航
如何构件性能优化,高效的应用程序无论利用那种技术,都会是一个复杂的问题,尤其是构件大型的应用,会有很多影响到系统性能,效率的因素。比如,程序的架构是否合理,是否有冗余逻辑造成效率降低,核心算法是否优化,是否关注代码细节的合理处理,等等,很多适用于其他技术的经验,方法也应该适用于构建 AIR 应用程序。那么,有没有一些针对AIR 应用程序相对特殊的地方呢?
首先引入一个概念,帧频(Framerate)。我们都知道电影,动画都是一帧一帧的播放的,通常以每秒 24 帧作为一个基础,因为这是适合人类视觉感光频率的,当然在高清,流媒体等应用领域帧频会不同于这个值。我们所构建的基于 flash 的 AIR 应用程序都基于这个原理,即便看似不变的界面也是一帧一帧渲染出来的,系统默认设置值也是 24 帧每秒。毋庸置疑,每渲染一帧,都会消耗一定 CPU, 内存资源。
Framerate 在 flash/AIR 应用中的位置就像心脏在我们身体中一样,同一个人,在安静或睡眠时心率减慢,运动时或情绪激动时心率加快。人必须保持的保持在一个合理的心率范围,就像美洲豹如果以时速 120 公里追赶猎物,超过 30 秒还没有抓到的情况下就必须止步放弃一样,长时间高速运转就会给身体带来损害。 Framerate 道理也是一样,如果长时间维持在一个高帧频率必定会带来额外的系统消耗。
Arno在他的博客中提出了几个最佳实践,归为以下几点:
1 ,尽量使用低的帧频率
2 ,动态设置帧频率已适应动画渲染需要
3 ,不再必须的情况下不要使用 Event.ENTER_FRAME handler
4 ,尽量介绍少用 Event.ENTER_FRAME 和Timer 的个数
对于以上几点可以再做出以下补充解释:
1 ,如果你所构建的应用程序是以数据驱动 , 实现商务逻辑为主,并且展现层上没有特别多的动画, transition, 或是 effect, 可考虑降低整体帧频率,如设置为 7 帧每秒,正常情况下,可降低 CPU 1%- 5% ( 在我的 MAC 上已证实 ) 。 同时,如果应用程序的 user interaction 不是很多的情况下,当应用程序处于AIREvent.APPLICATION_DEACTIVATE 时,降低帧频率至 0 ,也可大大降低 CPU 使用率。
如果有 Video playback, 或是大量 animation 的时候,可考虑设置一个开关机制,需要的时候开启开关,动态把帧频设高,播放完毕后再恢复省资源模式。
2 ,如果在不同的 timer 中,能找到之间的逻辑关系,则减少独立 timer 的个数,用逻辑去实现与之相关联 timer 的触发。
3 ,我在调试过程发现可设置一个用 timer 检测的简易可视帧频率,这样能科学验证,且心理看得踏实,代码如下供参考:
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml " layout="absolute" creationComplete="init()" width="320" height="480" verticalScrollPolicy="off" horizontalScrollPolicy="off" borderStyle="none" showGripper="false" showStatusBar="false" showFlexChrome="false" backgroundColor="#FFFFFF"> <mx:Script> <![CDATA[ import mx.events.AIREvent; private var fpsCounter : uint; private var timer : Timer; public static const ACTIVE:int = 24; public static const INACTIVE:int = 1; private function init() : void { timer = new Timer(1000); timer.addEventListener( TimerEvent.TIMER, onTimerEvent ); timer.start(); fpsCounter = 0; this.addEventListener(Event.ENTER_FRAME, onFrameEnter); this.addEventListener(AIREvent.APPLICATION_DEACTIVATE,onDeactivate); this.addEventListener(AIREvent.APPLICATION_ACTIVATE,onActive); } private function onActive(event: Event):void { this.stage.frameRate = ACTIVE; setFPS.text = Math.round(stage.frameRate).toString() + " fps"; } private function onDeactivate(event: Event):void { this.stage.frameRate = INACTIVE; setFPS.text = Math.round(stage.frameRate).toString() + " fps"; } private function onFrameEnter( event : Event ) : void { fpsCounter++; trace("enterframe"); } private function onTimerEvent( event : Event ) : void { curentFPS.text = fpsCounter.toString()+ " fps"; fpsCounter=0; } public function changeFrameRate(delta:Number):void { stage.frameRate = stage.frameRate + delta; setFPS.text = Math.round(stage.frameRate).toString() + " fps"; } ]]> </mx:Script> <mx:Image id="logo" source="@Embed(source='assets/logo.jpg')" y="195" x="102"/> <mx:Button id="decreaseButton" x="27" y="329" label="-" width="67" height="74" fontSize="60" click="changeFrameRate(stage.frameRate > 20 ? -5 : -1);"/> <mx:Label text="Current FPS" color="#797979" width="105" textAlign="center" fontSize="14" x="37" y="177" fontWeight="bold"/> <mx:Label text="24 fps" color="#797979" width="96" textAlign="center" fontSize="14" x="167" y="177" id="curentFPS"/> <mx:Button id="increaseButton" x="217" y="329" label="+" width="74" height="74" fontSize="60" click="changeFrameRate(stage.frameRate >= 20 ? 5 : 1);"/> <mx:HBox height="40" verticalAlign="middle" bottom="0" left="0" right="0" horizontalAlign="center" horizontalGap="0"> </mx:HBox> <mx:Label text="Set FPS" color="#797979" width="96" textAlign="center" fontSize="14" x="26" y="149" fontWeight="bold"/> <mx:Label text="24 fps" color="#797979" width="96" textAlign="center" fontSize="14" x="167" y="150" id="setFPS"/> <mx:TextArea x="10" y="10" width="300" color="#797979" height="78" borderStyle="none" fontSize="14"> <mx:text>Compare the CPU usage of this application when it is in different FPS setting.</mx:text> </mx:TextArea> </mx:WindowedApplication>
4 ,还有很多影响 AIR 性能效率的小细节 如 number of display objects on stage (http://bugs.adobe.com/jira/browse/FP-1149) 等等。欢迎大家一起来探讨!
-瓶子
发表评论
-
关于AIR应用中共享HTTP Cookies的更多信息 [译]
2011-01-24 13:03 2334原文:More on Sharing HTTP Co ... -
已发布的AIR下载链接列表
2011-01-24 12:56 1985嗨,如果你还在为能下载到已发布过AIR Runtime 老版本 ... -
EncryptedLocalStore在移动设备或TV上的替代方案 [译]
2011-01-22 17:45 1709原文:Replacing EncryptedLocalS ... -
移动设备上的NativeWindow [译]
2011-01-20 18:42 1477原文:Replacing NativeWindow on Mo ... -
移动设备上的AIR程序是如何更新的 [译]
2011-01-20 18:39 2089原文:Replacing Updater on mobile ... -
Adobe AIR for Android 中的GPU 渲染 [译]
2011-01-17 20:14 3736原文:GPU Rendering in Adobe AIR f ... -
Flex/Flash整合HTML API [译]
2011-01-17 17:40 2101原文:Integrating Flex/Flash with ... -
在Linux平台下AIR对证书认证的支持 [译]
2010-12-05 12:36 1512原文:Certificate Support in AIR f ... -
AIR的企业分发 (三) [译]
2010-12-05 11:39 1797使用IBM Trivoli Provisioning Mana ... -
显示已安装的AIR应用程序的调试错误信息 [译]
2010-11-29 19:45 1528原文: http://cookbooks.adobe.com/ ... -
AIR的企业分发 (二) [译]
2010-11-27 19:17 1493使用Microsoft SCCM 2007 该节阐述了 ... -
AIR的企业分发 (一) [译]
2010-11-27 19:06 1668原文:Distributing AIR in the en ... -
Adobe AIR 2.5 中的HTML, HTML5, CSS 和JavaScript 新特性 [译] 下
2010-11-12 11:47 3128Adobe AIR 2.5 中的HTML, HTML5, ... -
Adobe AIR 2.5 中的HTML, HTML5, CSS 和JavaScript 新特性 [译] 上
2010-11-12 11:39 1859Adobe AIR 2.5 中的HTML, HTML5, CS ... -
PFI (Packager for iPhone) 更新 [译]
2010-10-13 23:18 1238原文:Packager for iPhone update ... -
开源媒体框架(OSMF)的介绍和概况:下 [译]
2010-09-15 12:45 3652OSMF考虑到媒体引入了新的类和新的概念 对于有Action ... -
开源媒体框架(OSMF)的介绍和概况:上 [译]
2010-09-15 11:20 6024原文:http://www.adobe.com/devnet/ ... -
AIR应用程序中TLS客户端身份验证的使用 [译]
2010-09-10 19:02 1554原文:http://blogs.adobe.com ... -
设置AIR应用程序的MIME类型 [译]
2010-09-10 17:54 3316原文:http://www.davidtucker.net/2 ... -
针对本地应用程序安装器(Native Application Installer)的一个更新框架 [译]
2010-08-26 18:36 1345原文:An Updater Framework for Nat ...
相关推荐
将改进后的蚁群算法应用到钢管混凝土构件的优化设计中,建立了以梁、柱构件截面特征为设计变量,造价最低为目标函数的优化设计模型。以钢管混凝土纯弯、轴压构件为例,进行模型优化分析,并与文献[4]中改进遗传算法的...
fx5800p结构构件及地基基础 计算程序开发与应用(密码jcgbgzyd).part2.第一次解压后与part1放在一起在解压。
小程序 型钢构件设计软件(学生必备)小程序 型钢构件设计软件(学生必备)小程序 型钢构件设计软件(学生必备)小程序 型钢构件设计软件(学生必备)小程序 型钢构件设计软件(学生必备)小程序 型钢构件设计软件...
casio fx5800p结构构件及地基基础 计算程序开发与应用(密码jcgbgzyd).part1.rar
HyperWorks二次研发技术在交通工具椅子构件拓扑优化过程中的应用PPT教案.pptx
2018基于bim的装配式构件厂生产管理系统应用
采用在软总线TAO(The ACE ORB)上利用XML文档中所包含的语义化的抽象数据类型对构件对象进行操作,从而实现语义化的性能约束构件组装。建构的XML模式描述了构件组装相关的构件接口、交互及配置规约,并通过接口显式地...
常用设计编程工具 钢构件计算程序小全常用设计编程工具 钢构件计算程序小全常用设计编程工具 钢构件计算程序小全常用设计编程工具 钢构件计算程序小全常用设计编程工具 钢构件计算程序小全常用设计编程工具 钢构件...
基于粒子群算法的预制构件生产调度优化应用研究.pdf
2)程序适用范围:任意截面的钢筋混凝土或素混凝土双向偏心受弯构件和双向偏心受压构件的应力计算; 3)为保证钢筋输入数据的正确性,程序将各根钢筋的坐标值输出在文件 “2 Coordinates of Bars.txt”中,用户可...
介绍了建筑构件耐火试验炉的研制思路、控制温度、压力的技术措施以及为满足构件力学试验所采用的约束条件模拟方法等。
构件库构件库构件库构件库构件库构件库构件库
重点介绍了1996年以来,我国国家层面开展的主要科研项目和取得的主要成果,以及高强高性能混凝土在工民建、桥梁、预制构件等各类工程中的推广应用简况,分析了应用高强高性能混凝土的技术、经济效益,指出了制约高强高...
针对工程领域中常规设计方法在方案选优过程中的不足,将遗传算法用于悬臂构件的优化设计.以工程造价为最优化目标函数,规范规定的抗弯抗剪承载力和正常使用要求作为约束条件,进行优化设计.根据设计变量的离散性和简单...
为此,根据基于构件的软件组装技术的概念和原理,提出一种应用系统组装框架,从软件体系结构的角度研究了构件的开发与组装方法,并将这一技术应用到软件工程网络课堂教学系统的开发上。相关实践活动表明,提出的方法...
大量实践经验表明,将构件技术引入到嵌入式系统的开发与利用当中,能够有效...文章从多个角度切入,着重分析以Java程序语言为主体的嵌入式构件模型MJ概念,并针对MJ涉及元素、符合方式及交互性等动态特征作深入浅出的研究。
大型预制混凝土构件结构性能试验报告(表格模板、XLS格式).XLS
低烈度地区短肢剪力墙结构抗侧力构件设计的优化,袁海庆,李芳,以低烈度区(武汉)某17+1层住宅建筑为对象,在给定建筑方案的前提下,采用最优准则法和穷举法对其抗侧力构件进行结构优化设计研�
经过使用,相比较而言,Asta所提供的构件易学易用方便灵巧,客户端程序无须任何数据库引擎或动态连结库即可方便的实现多层应用,且客户、服务器可实现实时信息传输。可以说,Asta为普通程序员提供了无须专门培训即可...