The Miner - 专业Flash AS3性能分析器(profiler)入门教程

The Miner是由加拿大的Jean-Philippe Auclairjpauclair.net开发的Flash性能分析器(profiler),其前身为开源的FlashPreloadProfiler。The Miner虽然现在已“沦为”商业软件,但其个人非商业用途(比如学习研究,开源项目)仍可以免费自由下载使用。

本文是应jpauclair之邀,希望通过这篇简单的安装使用教程,来推广The Miner的简体中文版

The Miner是完全绿色的软件/类库,提供两种安装使用模式:

(一)使用方法一,使用SWC直接嵌入TheMiner到最终编译的SWF中。

1. FlashDevelop新建工程,下载theminer_v1_3_10_nc.zip, 解压,在文件夹SWCs中复制TheMiner_zh-cn_v1_3_10.swc(TheMiner简体中文版)到项目文件夹的lib文件夹内,FlashDevelop中右键选中TheMiner_zh-cn_v1_3_10.swc,勾上Add To Library(此时TheMiner_zh-cn_v1_3_10.swc的文件名会变)。

2. 导入TheMiner:

  1. import com.sociodox.theminer.*;
复制代码


然后将代码

  1. this.addChild(new TheMiner(true));
复制代码


加入到初始化函数中即可。完整代码(Main.as)

  1. package
  2. {
  3.         import flash.display.Sprite;
  4.         import flash.events.Event;
  5.         import com.sociodox.theminer.*;
  6.         /**
  7.          * ...
  8.          * @author Bruce
  9.          */
  10.         public class Main extends Sprite
  11.         {
  12.                
  13.                 public function Main():void
  14.                 {
  15.                         if (stage) init();
  16.                         else addEventListener(Event.ADDED_TO_STAGE, init);
  17.                 }
  18.                
  19.                 private function init(e:Event = null):void
  20.                 {
  21.                         removeEventListener(Event.ADDED_TO_STAGE, init);
  22.                         // entry point
  23.                         this.addChild(new TheMiner(true));
  24.                 }
  25.                
  26.         }
  27.        
  28. }
复制代码


 

3. 现在Ctrl+Enter,测试SWF(启动Debug版的Flash Player), 会发现SWF上侧多出了一个工具栏,比如点击即时状态就可以看到当前的FPS,内存占用等情况。
 

记忆体分析器动态记录了SWF运行时中各个类(如Object,String,MovieClip,Sprite,BitmapData等)的实例数和内存占用,一目了然。
 

当然,最有用最常用的还是效能分析器,详细列出SWF中各个函数运行耗时及百分比。针对这些信息,开发者就可以对部分消耗过大的函数进行有针对性的优化,从而提高SWF的运行效率。另外效能分析器还可以用作AS3语法优化的测试工具。
 

此外,还有其他许多实用的工具,比如滑鼠事件,显示重绘区域,显示物件状态,内部事件分析器,载入器分析器,Save Capture to File(对SWF进行屏幕截图),复制资料到系统剪切板等,可以自己亲自测试使用。

(二)使用方法二,使用Pre-Launcher方式直接加载最终编译的SWF。

方法一比较简便,但如果有大量不同的项目需要测试,每个项目都多写两行代码,并要在最后发布时注释掉,就显得有些麻烦了。对此,The Miner提供了Pre-Launcher加载的方法,简单一次"安装"后,可统一对本机上的所有SWF做性能测试。原理很简单,设置Flash Player启动时首先加载TheMiner.swf,这样每次启动Flash Player时,Flash Player都自动先加载TheMiner.swf作为载体Preloader,然后再将要打开的SWF自动加载到TheMiner.swf中,使要打开的SWF在TheMiner.swf的控制之下,便可直接做性能测试了。

具体安装设置步骤:

1. 下载theminer_v1_3_10_nc.zip, 解压,在文件夹SWFs中复制TheMiner_zh-cn_v1_3_10.swfC:\TheMiner.swf(复制到C盘根目录并重命名为TheMiner.swf)

2. Flash Global Security Settings Flash Player全局安全设置中
(即打开该网页http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html
在该网页的SWF编辑多个位置-〉添加位置-〉信任此位置,中依次填入

  1. TheMiner.swf
  2. TheMiner.swf?Tracefile=trueTheMiner.swf?
  3. HookClass=getQualifiedClassName
复制代码


最终效果如下:
 

3. 系统文件中找到mm.cfg,一般位于系统用户文件夹,比如C:\Documents and Settings\Administrator\mm.cfg,用记事本打开,填入一下一行内容:

  1. PreloadSWF=C:\TheMiner.swf
复制代码


并保存。
 

安装完毕。现在只要随意单击任意一个SWF文件,TheMiner便会自动启动做效能分析了,比如:
 

成功安装后,如果想要临时暂停使用The Miner,只需要将C盘中那个TheMiner.swf重命名(比如重命为"_TheMiner.swf","TheMiner._swf"等)即可,恢复使用只需要再改回原来的名字TheMiner.swf

(三)简单应用实例。

这一部分用一个简单的例子来展示如何利用效能分析器来分析不同AS3语法的效率。一个经典的问题是AS3的for循环的循环变量使用int要比uint快。到底两者差别有多大?使用The Miner可以很轻松的来展示两者差别。

测试代码(  TheMinerTT.zip (545.4 KB) ):

  1. package
  2. {
  3.         import flash.display.Sprite;
  4.         import flash.events.Event;
  5.         import com.sociodox.theminer.*
  6.        
  7.         /**
  8.          * ...
  9.          * @author Bruce
  10.          * Ref: http://jacksondunstan.com/articles/1258
  11.          */
  12.         public class Main extends Sprite
  13.         {
  14.                 private var SIZEINT:int = 10000;
  15.                 private var SIZEUINT:uint = SIZEINT;
  16.                 private var i:int;
  17.                 private var u:uint;
  18.                
  19.                 public function Main():void
  20.                 {
  21.                         if (stage)
  22.                                 init();
  23.                         else
  24.                                 addEventListener(Event.ADDED_TO_STAGE, init);
  25.                 }
  26.                
  27.                 private function init(e:Event = null):void
  28.                 {
  29.                         removeEventListener(Event.ADDED_TO_STAGE, init);
  30.                         // entry point
  31.                         this.addChild(new TheMiner(true));
  32.                         addEventListener(Event.ENTER_FRAME, onEnterFrame);
  33.                 }
  34.                
  35.                 private function onEnterFrame(e:Event):void
  36.                 {
  37.                         loop_SIZEINT();
  38.                         loop_SIZEUINT();
  39.                 }
  40.                
  41.                 private function loop_SIZEINT():void
  42.                 {
  43.                         for (i = 0; i < SIZEINT; ++i)
  44.                         {
  45.                         }
  46.                 }
  47.                
  48.                 private function loop_SIZEUINT():void
  49.                 {
  50.                         for (u = 0; u < SIZEUINT; ++u)
  51.                         {
  52.                         }
  53.                 }
  54.        
  55.         }
  56. }
复制代码


其中loop_SIZEINT的循环变量为i,int型;loop_SIZEUINT的循环变量为u,uint型。循环次数都为10000次。运行结果如下:
 

效能分析器显示出了一堆函数的耗时。为了更清楚的对比我们关注的两个函数loop_SIZEINT和loop_SIZEUINT,在[函数名称]中输入"loop"以作筛选,结果如下:
 
可以清楚看到,loop_SIZEINT耗时百分比为0.13,loop_SIZEUINT为0.26,的确是int型的循环变量要快得多。

最后单击“复制到剪贴簿”,可以把测试信息以文本形式复制保存到文件中,方便查看。
 

总结:The Miner简单易用功能强大,可以用来弥补Flash IDE性能分析工具的缺失,FlashDevelop性能分析工具的不足。 虽然Flash Builder本身也内置了高级的性能分析工具,但Flash Builder本身体积庞大,价格昂贵且前途未卜, 一般习惯了Flash IDE的开发者少会选择再安装个Flash Builder。所以综合来说,The Miner目前是普通开发者进行Flash项目性能测试器的必备工具。

链接:
1. The Miner Profiler官方网站 http://www.sociodox.com/theminer/
2. 功能介绍推广链接:
https://www.plimus.com/jsp/redirect.jsp?contractId=3042450&referrer=1038634
3. 个人非商用免费版下载推广链接:
https://www.plimus.com/jsp/download_trial.jsp?contractId=3042450&referrer=1038634

个人非商用免费版与商用版在功能上没有不同(作者这一点非常厚道),如果条件允许,或想要用于商业用途,或单纯想支持该工具,可考虑购买商用版The Miner Pro授权。

目前个人商用版售价为154.37人民币/24.42美元,
(商用版购买推广链接https://www.plimus.com/jsp/buynow.jsp?contractId=3042450&referrer=1038634)
如果有考虑想够买商用版The Miner Pro 授权的兄弟,价格上可以有很大优惠,有意向购买者可直接联系我。

posted @ 2012-08-04 11:50  rob_2010  阅读(464)  评论(0编辑  收藏  举报