博客公告(点击显示/隐藏)|  今日心情:神学
2010-07-30 21:09:43
小S吧今天你来了吗?更新速度:每周2-3篇以上!
在俺博客看到有用的东西,学习了之后,记得回访带点人气哦 ^_^ 嘿嘿!
欢迎跟俺交换友情链接啊。。留言,直接QQ等联系我都行啊
转载本博客文章请注明:来源小S吧——sunbright博客,链接地址:http://www.xiaos8.com
首先我们区分AS3的编译版本,目的是让同样的code,如果使用debug编译,则会含有很多测试代码方便调试;如果使用release编译,则不会将调试代码编译进去。
用过Visual Studio(以下简称VS)的程序员都知道,VS在编译时有个debug和release的选项,而flash builder(以下简称fb)在编译时,虽然可以选择不同路径编译,但无法像VS那样真正的区分编译版本。
下面我依然要说,fb的确没办法像VS那样真正的去区分版本进行编译,但fb可以条件编译!
什么是条件编译
  一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”。
接下来看看,我们怎么样使用条件编译来完成区分编译Debug版本和Release版本:
1、首先来看一段代码:
package {
  import flash.display.Sprite;

  public class TestBuild extends Sprite
  {
    CONFIG::debug
    public function TestBuild()
    {
      graphics.beginFill(0xff0000,1);
      graphics.drawRect(0,0,100,100);
    }
    
    CONFIG::release
    public function TestBuild()
    {
      graphics.beginFill(0x0000ff,1);
      graphics.drawRect(0,0,100,100);
    }
  }
}

2、TestBuild有两个构造函数,不同的是一个构造函数上有CONFIG::debug,一个有CONFIG::release;
通过理解,如果是debug编译画出来的是红色的正方形,而release编译是蓝色正方形。

3、然后我们使用mxmlc命令行对这段代码进行debug编译

mxmlc src/TestBuild.as -define=CONFIG::debug,true -define=CONFIG::release,false -output bin-release/TestBuild.swf
4、得到一个swf文件,打开一看是红色正方形,的确是debug版本编译

5、然后改一下编译参数,进行release编译
mxmlc src/TestBuild.as -define=CONFIG::debug,false -define=CONFIG::release,true -output bin-release/TestBuild.swf
6、得到一个swf文件,打开一看是蓝色正方形,的确是release版本编译

OK,此文讲完了,你看懂了吗?不懂请留言
歌名叫《幸福的两口子》,词和曲都不错,再加上是庞龙来唱,挺不错的,值得推荐!


歌词:(每句话都是9个字,并且每句话的结尾都是zi音结尾,这歌词写得好啊!)
记得你最爱穿白裙子,我最喜欢你的大辫子,
你爱看我傻笑的样子,说我是你爱的男孩子,
静静坐在湖边的椅子,我第一次抱着女孩子,
我们一起攒钱买房子,还要一起生个胖儿子。

我不能忘记你的样子,我们一起过的苦日子,
我们一定相爱一辈子,你永远是我的小娘子。

记得过年一起包饺子,一起喝水用的茶缸子,
站在河里光着脚丫子,数着天空飞过的燕子,
你笑我变成了老头子,我笑你变成了老婆子,
心里念着彼此的名字,永远不能忘的白裙子。

等到我长出了白胡子,一起坐在家的老院子,
看着满地玩耍的孩子,回想我们年轻的日子。

我不能忘记你的样子,我们一起过的苦日子,
我们一定相爱一辈子,你永远是我的小娘子。

记得你最爱穿白裙子,我最喜欢你的大辫子,
你爱看我傻笑的样子,说我是你爱的男孩子,
你笑我变成了老头子,我笑你变成了老婆子,
心里念着彼此的名字,永远不能忘的白裙子。
以前还在开发校内第三方APP(现在叫人人网),每做一个都会加上自己博客的链接,那时候独立IP都是恒定在2000的,不过后来被空间商警告流量过大,正好我也从以前的公司离职,离开了第三方APP这个行业,于是也中断了第三方APP开发,并且自毁了所有APP程序,然后博客访问量就一直恒定在200左右的独立IP。昨天竟然又暴访问量,哇哈哈。。不过这都是虚的,只是我做了点小动作而已。
图片名称:高分期平均每1分钟就有两个人来过我博客
uploads/201004/12_144857_2.gif

图片名称:除了昨天,上周其他时间段的访问量也很不错
uploads/201004/12_144847_1.gif

图片名称:不知道为什么广东的人特别多
uploads/201004/12_144912_3.gif
前言
本文是寂寞火山在3月28号的上海Flash开发者交流会演讲的内容。
此文讲的东西非常棒,对于如何优化Flash程序有非常好的帮助,做为一名同是Flash程序员的我郑重推荐此文,如果你觉得这个测试报告对你有用,请支持寂寞火山奉献的这份报告,并且在转载时请写上版权:
作者:寂寞火山整理:sunbright原文地址

★测试环境:
→硬件环境:Intel (R)  Core (TM)2  Duo  CPU  T5850 @2.16GHz,2.00GB内存。
→软件环境:FLASH CS3,Adobe Flash Player 9.0  r45,AVM2。
→FLASH IDE环境:舞台尺寸:750×500像素,帧频:24 fps。
→测试报告源文件:点击进入火山门户相关帖

★本文所用到的简称:
→FP:FLASH PLAYER。
→MC:影片剪辑元件。
→BTN:按钮元件。
→G:图形元件。

★鼠标事件性能测试:

测试分类 测试描述 测试结果 结果分析

1,同级多MC测试

在root下分别放置200,400,800个MC,MC中无其他元件,只有一个形状。鼠标在FP上快速移动,观察CPU占用情况。

200时:CPU稳定在5%左右;
400时:CPU稳定在10%左右;
800时:CPU稳定在20%左右。

当鼠标在FP上快速移动的时候,CPU的占用情况随MC的数量呈线性增长的趋势。

2,同级多BTN测试

在root下分别放置200,400,800个BTN,BTN中无其他元件,只有一个形状。鼠标在FP上快速移动,观察CPU占用情况。

200时:CPU稳定在30%左右;
400时:CPU稳定在50%左右;
800时:CPU稳定在70%左右。

当鼠标在FP上快速移动的时候,CPU占用情况随BTN的数量呈线性增长的趋势,但CPU基数比MC大,增长势头也比MC猛。

3,同级多G测试

在root下分别放置200,400,800个G,G中无其他元件,只有一个形状。鼠标在FP上快速移动,观察CPU占用情况。

CPU在三种情况下稳定在1%-2%。

G与鼠标事件无关系。

4,同级多SPRITE测试

在root下分别放置200, 400,800个SPRITE,SPRITE中无其他元件,只有一个形状。鼠标在FP上快速移动,观察CPU占用情况。

结果与MC基本一致。

 

5,多层嵌套MC测试

在root下分别放置40,80,160个MC,MC中层层嵌套4个MC,这样画面上呈现出来的还是200,400,800个MC。鼠标在FP上快速移动,观察CPU占用情况。

40时:CPU稳定在10%左右;
80时:CPU稳定在20%左右;
160时:CPU稳定在30%左右。

画面上同样数量的MC,有嵌套比没嵌套的更占CPU。

综合分析与推测

★疑点一:同级的时候,为什么BTN比MC占用CPU明显多很多?我们知道,SimpleButton类直接继承自InteractiveObject,而MC则继承自Sprite,Sprite又继承自DisplayObjectContainer,DisplayObjectContainer才继承自InteractiveObject。直观上感觉应该是MC应该比按钮更复杂,更占CPU的,但事实却正好相反,为什么呢?

★疑点二:当鼠标在屏幕上移动的时候,FP都做了些什么呢?重绘屏幕了么?打开“显示重绘区域”,可以很明显的看到并没有重绘。那到底是什么在占用CPU,我猜测很可能是鼠标事件的缘故。那么当鼠标移动的时候,会触发什么事件呢?观察InteractiveObject,无非是mouseMove、mouseOver、mouseOut、rollOver、rollOut。而MC和BTN的这些事件都是继承自InteractiveObject的,为什么对CPU的占用情况却大不相同?BTN为什么比MC高那么多?难道是BTN的某些属性造成的这个差异?比如:overState、useHandCursor等?

★疑点三:如果真的是事件造成的CPU占用?那么我明明没监听任何事件却还在占用CPU呢?如果不是因为监听,那只能推测是dispatchEvent造成的,因为不管你监听不监听,事件总是要dispatch的,可问题又来了,为什么当我的鼠标放在屏幕上不动的时候,却又不会占用CPU?不动的时候,明明也dispatch了啊?

★疑点四:为什么多层嵌套MC的时候,屏幕上相同数量的MC比同级放置占用的CPU要高?我想,唯一的解释就是“事件冒泡”。从测试可以看出来,当冒泡层次比较深的时候,将会额外多占用几乎一倍的CPU。这等规模的资源占用,绝不可小觑。另外可以看出的是,就算你不监听,事件冒泡依然占用CPU,这和鼠标移动的情况是一样的。所以我猜,这两个疑点是不是因为一个原因导致的呢?另外我还有个有力的证据来证明是事件冒泡在占用CPU,就是如果我把每个最外层的MC的mouseChildren都设置为false的话,就不会额外占用那么多CPU了。

★以下几条将对性能优化很有帮助:
1,做界面的时候,能用G就不用MC,能用MC就不用BTN。
2,尽量避免元件过多,能合并为一个元件的最好合并。
3,尽量避免元件深度嵌套,能放同级的放同级。
4,不需要鼠标操作的对象,请将mouseChildren和mouseEnabled设置为false。
5,美工做的素材,最好亲自看一下,并指出注意的地方。

结论
★导致内部绘制的情况:
  1. 把鼠标移动到或者移开继承自InteractiveObject的实例。
  2. 当鼠标在一个继承自InteractiveObject的实例上点击或者释放时。
  3. 当用空格键或者Enter,TAB键激活一个继承自InteractiveObject的实例时。