- 浏览: 132641 次
- 性别:
- 来自: 郑州
文章分类
最新评论
-
Ken艹小哲:
太赞了 哥们 加扣
猜数字问题的最少步数算法. -
chenyuan122912:
...
解决AS3 Socket编程中最令人头疼的问题 -
hyx0914:
有源代码打包下载的吗?
Flex地图分块加载的实现 -
tianhai110:
非常有价值的 测试总结
时间效率,Timer和EnterFrame在FP 10.1之后测试和建议 -
763675117:
你好,fengxiangpiao,看了你的文档,我的需求和你差 ...
解决MovieClip打印问题 转
关于Timer还是EnterFrame的选择,一直是很多AS3开发者讨论的话题, 随着10.1即将普及,我这次对10.1的Timer和EnterFrame进行了一次较详细的测试,给大家在他们的选择和使用上做些参考。
注,flashplayer10.1新增了一个当前窗口在非激活状态下会自动降低fps到2fps来节省cpu消耗,这将直接影响靠fps驱动的enterframe的效率和准确性。
测试环境主要以网页下的flash执行效率为主, 分为空运算和重运算,同时运行和分别运行。
FPS为25(大多数应用的默认值), 即40ms间隔,发布统一选择以10.1发布。
为了避免因为频繁trace或频繁写入场景txt受到影响,我设定了间断式的输出结果来保证结果的纯洁。
(测试代码见楼底)
测试结果如下:
1,独立Timer 运行,即40毫秒的timer,更新时无任何运算。
结论:从结果上看, Timer在网页中难以稳定运行在40ms, 但貌似相对稳定的运行在65和70之间切换。
2,独立Timer 运行 , 在上面的基础上增加最小化当前窗口和切换到其他tab页中的操作。
结论:如图所见,Timer同样被10.1的新增自动降fps功能影响,会被限制到2fps。
3, EnterFrame独立运行,25fps,更新时无任何运算。
结论: 比Timer更准确,但 除了刚开始的1秒钟,之后的fps并不是稳定在40的, 而是在35和50之间切换。
但至少是围绕着40ms。
4,EnterFrame的降fps和Timer的相同,都是500ms, 2fps。 这个就不贴图了。
5,因为无运算时Timer比Enterframe时间效率要差一些,以至于独立的Timer重运算普遍都比EnterFrame的耗时要偏长。
6,独立Timer,改为 100ms 和 110ms的测试。
结论:Timer 在100毫秒跑的非常精确,经过测试,可以达到精确的值必须是100的倍数,即100,200,300… 右图为110ms对比,可以看到非常的诡异。 这个在pc和mac测试结果都差不多,pc上更精确,mac略有偶尔的数值抖动。
7,Timer使用空运算,EnterFrame使用重运算,同时运行,顺序是Timer在前。
结论: 我们发现,由于enterframe中使用了重运算,timer即便是在更新时,由于得不到cpu时间,并不会被执行,而是等enterframe执行结束后,timer再执行,并且由于是空操作,所以timer和enterframe返回的时间是同样的。
8,为了进一步证实第七点结论,又做了两组实验:1)timer以40ms和enterframe的10fps(100ms), 2)让timer以100ms,enterframe是25fps。
结论:两组实验都完全输出enterframe在前的顺序,并且timer和enterframe的时间都一致,所以可以证实因为enterframe效率优于timer,timer总是在enterfame之后才会更新,在enterframe执行重运算时, timer会得不到cpu时间。
9,Timer重运算,EnterFrame空运算,fps一致。
结论:由于以上论证,再加上Timer内有重运算,enterframe依然会被先执行,并且Timer的速度会受到进一步影响,时间经常无法和EnterFrame同步,只能勉强跟上。
写了这些实验,对Timer和EnterFrame的使用上有一些建议:
1,EnterFrame是恒定的,稳定的,比较适合用来更新渲染画面,如Tween。 但不适合做异步计算和处理, 如果能保证cpu每帧的计算效率在40ms以内,可以把计算放到enterframe时序中,这样可以稳定25fps,当然,这不包括渲染损耗。
2,Timer在100ms的倍数是很稳定的,pc和mac都能稳定,非100的倍数的值会有两个相差不大的值交替出现。
3,EnterFrame在12、20、30fps都比25fps更稳定,25fps会有两个相差不到大的数值交替出现。
4,EnterFrame在计算时优于Timer。
5,Timer更适合使用异步的长周期来改变数据的状态,并不适合短时间持续更新数据,或是渲染画面。
6,EnterFrame和Timer同样受到非活动创口的fps自动降低的影响。
7,当受到影响时,无法通过判断frameRate==2,使用一个延迟时间,判断出正好500ms的延迟(2fps),并在相应的enterframe中做切换特殊处理,在2fps中要完成原正常fps的渲染结果才能避免渲染的延迟影响。
————————————————-code ——————————————————–
代码中的函数注释和数值可微调即可实现上面的测试结果
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.TimerEvent;
import flash.text.TextField;
import flash.utils.getTimer;
import flash.utils.Timer;
/**
* …
* @author Demon.S
*/
public class Main extends Sprite
{
private var timerDelay:Number;
private var enterDelay:Number;
private var txt:TextField;
private var log:String;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//init
txt = new TextField();
txt.width = 500;
txt.height = 500;
addChild(txt);
log = “”;
//test suit
// testTimer();
testEnterFrame();
}
private function testEnterFrame():void
{
stage.frameRate = 25;
this.addEventListener(Event.ENTER_FRAME, enterFrameHandler)
enterDelay = getTimer();
}
private function enterFrameHandler(e:Event):void
{
//heavyTest();
var t:int = getTimer() – enterDelay;
_trace(“enter ” +t )
if (t == 500) _trace(“fp10.1 hidden mode”)
enterDelay = getTimer();
}
private function timerUpdate(e:TimerEvent):void
{
// heavyTest();
var t:int = getTimer() – timerDelay;
_trace(“timer ” + t)
if (t == 500) _trace(“fp10.1 hidden mode”)
timerDelay = getTimer();
}
private function testTimer():void
{
var timer:Timer = new Timer(40);
timer.addEventListener(TimerEvent.TIMER, timerUpdate)
timerDelay = getTimer();
timer.start();
}
private function _trace(…arguments):void
{
//trace.apply(this, arguments);
log += arguments.join() + “\n”;
if (log.length > 100) {
txt.appendText(log);
txt.scrollV = txt.maxScrollV;
log = “”;
}
}
private function heavyTest():void
{
for (var i:int = 0; i < 1000000 ; i++ ) var a:Array = [];
}
}
}
发表评论
-
最全的Flex网站
2011-10-15 23:18 677一、国外站点 1.资源 类Adobe Flex 2 ... -
时间效率,Timer 和 EnterFrame 在 FP 10.1 之后测试和建议
2011-04-23 22:16 1031关于Timer还是EnterFrame的选择,一直是很多AS3 ... -
Socket粘包问题
2011-04-22 23:21 990这些天做类似QQ空间的 ... -
关于Flash Socket通信的安全策略问题的一点心得
2011-04-22 22:36 670昨天做测试的时候遇到 ... -
FLEX入门实例--------FLEX全屏功能实现及右键菜单
2011-03-26 11:58 781FLEX的全屏功能的实现,光写AS还不够,还需要对JS部分做一 ... -
flex中的Text属性
2010-12-08 12:31 842不同于Lable只显示单行文本,Text可以显示多行文本, ... -
Flex跨域问题
2010-11-08 17:55 757From ESRI: The client brow ... -
Flex屏蔽并自定义鼠标右键菜单(转载)
2010-11-08 17:53 840最近手头有个项目需要屏蔽Flex鼠标右键菜单并自定义新的fle ... -
使用 IBM Rational Functional Tester 7.0.1 测试 Flex 应用程序
2010-11-05 21:45 815关于这篇文章必要的信息 这篇文章假定您已经对使用 IBM® ... -
在 Ajax 应用程序中实现实时数据推送
2010-11-05 21:40 637简介 Ajax 技术已经存在了一段时间,开发的动力已经真正开 ... -
使用 Flex 和 Dojo 开发交互式Web应用程序
2010-11-05 21:38 955引言 以用户体验为核 ... -
Flex 应用内存泄露的分析与诊断
2010-11-05 21:36 775引言 Flex 采用 ActionScrip ... -
flex SystemManger
2010-11-05 16:35 670软件编程牛人网 Framework Fundamentals ... -
Flex 不同 application 之间传参数
2010-11-05 16:33 461软件编程牛人网 通过主影片来获得所有子影片的systemma ... -
如何在flash保留小数位
2010-11-04 20:07 795在家上网赚钱更容易 fl ... -
实例讲解Flex3的SharedObject对象用法
2010-11-04 16:01 732在家上网赚钱更容易 Flex中的SharedObj ... -
Flex中12个最基本、最简单但却最有用的函数
2010-11-04 15:54 662在家上网赚钱更容易 No.1 复制内容到剪贴板 S ... -
谈谈Flex中ArrayCollection的复制(克隆)
2010-11-04 15:51 692在家上网赚钱更容易 在Flex的开发过程中,常常会遇到复 ... -
flex中的拖放操作(一)
2010-11-04 15:47 899在家上网赚钱更容易 可视化的开发环境最大的特点是允许你在 ... -
flex中的拖放操作(二)
2010-11-04 15:46 746在家上网赚钱更容易 手动添加 drag-and-drop ...
相关推荐
C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4...
C# Timer 中怎么在固定时间和固定周期中调用事件
精确的控制时间间隔,避免Timer的时间间隔不准
本案例是MATLAB GUI利用timer函数(TimerFcn)实现实时呈现系统时间的功能和倒计时的功能。 本案例中实现两个Demo,第一个Demo是实时呈现系统时间,它的功能实现的是:每间隔1秒钟时间,执行一次获取系统时间并呈现...
下面是一个在Android中使用定时器Timer和TimerTask的启动,停止,暂停,继续等操作的demo。 需要注意的问题主要有两点: 1、Timer和TimerTask在调用cancel()取消后不能再执行 schedule语句 2、只能在UI主线程中更新...
c# timer的很简单的测试用例
单片机C语言程序设计 TIMER0与TIMER1控制条形LED(有源码)单片机C语言程序设计 TIMER0与TIMER1控制条形LED(有源码)单片机C语言程序设计 TIMER0与TIMER1控制条形LED(有源码)单片机C语言程序设计 TIMER0与TIMER1控制...
C# 使用Timer控件显示当前时间! 值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net/
STC8a8k所有定时器测试程序
最新单片机仿真 TIMER0与TIMER1控制条形LED最新单片机仿真 TIMER0与TIMER1控制条形LED最新单片机仿真 TIMER0与TIMER1控制条形LED最新单片机仿真 TIMER0与TIMER1控制条形LED最新单片机仿真 TIMER0与TIMER1控制条形LED...
看到 “WM_TIMER会不会和窗口一起销毁?”一贴为测试自己想法所写。
反时间限制,让许多试用版软件没有时间限制
本文实例讲述了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析,分享给大家供大家参考。具体分析如下: ...是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事
Timer和TimerTask的使用 关于java函数中timer类的相关代码 和使用
C#时间控件 timer示例 C#时间控件 timer示例
通过java的TimerTask与Timer设计时间监控,写了一个测试类,帮助新人学习。
erlang的timer和实现机制 Erlang程序设计
加Timer控件 timer1 编写其Tick事件为 private void timer1_Tick(object sender, ...在Form的Load事件中 对timer1进行相关设置: private void MainForm_Load(object sender, EventArgs e) { this.toolStripSt
Alert和Timer编程范例