![]() |
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 |
|
|

使用eval()函数取代Flash MX介绍的数组下标访问,我们发现状况并没有明显的改变。
换名话说下面的代码:
|
var mc = eval("_root.myMc"+i); |
并不比下面的代码快:
|
var mc = _root["myMc"+i]; |
正如您能够从我们的图表中看到的一样,差别确实很小。

这个测试展示Flash MX未公开的ASBroadcaster对象是如何帮助从Flash Player中挤出额外的速度的。
这一基准创建500个影片剪辑然后测试删除它们需要多少时间。
循环版本针对每个影片剪辑调用removeMovieClip(),而ASBroadcaster版本为每个剪辑订制一个事件处理函数。当broadcaster发布这一自定义事件时,所有的影片剪辑处理这一事件,这将得到一个更好的结果。
这是循环版本:
|
MAX = 500; SX = 550; SY = 330; MovieClip.prototype.onCustomEvent = function() { this.removeMovieClip(); }; function init() { var i = MAX; var rnd = Math.random; while (--i>-1) { var m = _root.attachMovie("enemy", "e"+i, i); m._x = rnd()*SX; m._y = rnd()*SY; } } init(); function bench() { var t = getTimer(); var i = MAX; while (--i>-1) { _root["e"+i].onCustomEvent(); } res.text = "time: "+(getTimer()-t); } |
同样的工作,使用ASBroadcaster:
|
MAX = 500; evtManager = {}; ASBroadcaster.initialize(evtManager); SX = 550; SY = 330; MovieClip.prototype.onCustomEvent = function() { this.removeMovieClip(); }; function init() { var i = MAX; var rnd = Math.random; while (--i>-1) { var m = _root.attachMovie("enemy", "e"+i, i); m._x = rnd()*SX; m._y = rnd()*SY; evtManager.addListener(m); } } init(); function bench() { var t = getTimer(); evtManager.broadcastMessage("onCustomEvent"); res.text = "time: "+(getTimer()-t); } |
关于Flash MX 2004的一个有趣事实是ActionScript编译器在许多方面作了改进。新的编译器处理全局(player 6和7)和局部变量(仅仅player 7)能做得更好,这使得本文提到的一些压缩代码的技巧变得不那么重要。
通过我们的基准表,您可以发现,一些非常有趣的目标已经实现了。
我们关注的最需要注意的改进是_global变量看起来比时间轴变量快得多,嵌套循环比以前运行得更好。并且您也会发现几乎每个测试都比用Flash MX版本编译器版本运行得快。
通过精心地选择正确的方式编写代码,我们可以极大地改进Flash Player的表现,这是我们能够从所有这些基准中学到的。
尽管我们已经在这儿举出了为数不少的优化要点,仍然有更多的需要您亲自实验,为了展示其它的代码压缩技巧,更多的基准可能被创建。
我们认为最好的途径就是孤立那些非常消耗CPU的规矩,尽可能多地尝试这些建议,也要针对您遇到的具体问题独立进行一些测试。
如果您愿意,您可以更深入地讨论这些话题。
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | | |
|
|