当前位置:首页>网络学院>网页制作>Flash教程>文章内容

讨论——关于Flash 程序的优化

[ 来源:www.it55.com | 作者: | 时间:2007-07-12 | 收藏 | 推荐 ] 【

    讨论说明:Flash Ation Script的效率不佳,相信写AS的朋友最关心也最头痛的莫过于此了。所以如何提高AS 的效能值得探讨的。
    希望大家能把平时积累的一些经验在此分享一下。

vd;k;l www.it55.com rdfg

讨论一:在国外看到一个有意思的讨论,总结了一下,看以下4段代码,请分别执行,看看所用的时间。

www.it55.com

var MAX_VALUE = 39999function loop() {	var st=getTimer()	var z;	for ( i=0; i<MAX_VALUE; i++) {		z ++;	}	trace(getTimer()-st);} vd;k;l www.it55.com rdfg 

_global.MAX_VALUE = 39999function loop() {	var st=getTimer()	var z;	for ( i=0; i<MAX_VALUE; i++) {		z ++;	}	trace(getTimer()-st);} 
it55.com
function loop() {                var MAX_VALUE = 39999	var st=getTimer()	var z;	for ( i=0; i<MAX_VALUE; i++) {		z ++;	}	trace(getTimer()-st);} 

www.it55.com在线教程


function loop() {         var MAX_VALUE = 39999	var st=getTimer()	var z;	for (var i=0; i<MAX_VALUE; i++) {		z ++;	}	trace(getTimer()-st);} 

www.it55.com



回帖一:有意思。以后循环都要加上var了。

回帖二:想不到一个VAR竟然快了这么多。

回帖三:所以,上面的结论是多使用局部变量!
it55.com
  http://www.it55.com/ 
原贴地址:http://www.blueidea.com/bbs/NewsDetail.asp?id=1057820 
vd;k;l www.it55.com rdfg
仍在讨论中,敬请关注. 
it55.com
it55.com
http://www.it55.com/

IT资讯之家 www.it55.com


  讨论二:看来要尽量使用局部变量。
另外改造一下for循环也能显著提高效率

function loop() {
var MAX_VALUE = 39999
    var st=getTimer()
    var z;
    for (var i=MAX_VALUE;--i>0;) {
        z ++;
    }
    trace(getTimer()-st);
} www.it55.com在线教程


回帖一:果然...........+比-慢呢
(var i=0;++i<MAX_VALUE;)还是不如(var i=MAX_VALUE;--i>0;)的快
function loop() {
    var i=MAX_VALUE = 39999
    var st=getTimer()
    var z=0;
var i;
    while (--i>0) {
        z ++;
    }
    trace(getTimer()-st);
}

function loop2() {
    var i=MAX_VALUE = 39999
    var st=getTimer()
    var z=0;
var i;
    for (;--i>0;) {
        z ++;
    }
    trace(getTimer()-st);
}

loop();
loop2();

试验了一下,多于半数的情况下while的稍微快那么一点点点点
回帖二:主要是判断上的缘故
i<0
i<max
i<obj.length
这3个判断由上到下越来越慢;
--------------------------- 45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn
另外理论上,(我没在flash试验过),
z++ , ++z , z=z+1 这三种操作,
前两种基本上没有速度的差别,而最后一种最慢.

原贴地址:http://www.blueidea.com/bbs/NewsDetail.asp?id=1057820 45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn 
仍在讨论中,敬请关注. 

sflj www.it55.com kg^&fgd

讨论三:循环差不多了吧,程序优化不仅仅是循环哦
在从一个序列、集合里剔除重复的工作,大家都有什么技巧呢?
比如要往一个序列里添加内容,但是又不可以是这个序列里已经有的,也就是说保证这个序列里的内容是不重复的,
最常见的是数组,加入很方便,push进去,但是要判断是否重复了,就很麻烦,一般都是用一个for遍历,逐一对比,但是每push一次都要先做个循环判断,就非常之慢,于是改用object,
var xxx={aaa:1,abc:1,ccc:1};
那我在新加入的时候只要判断if(xxx['ddd']!=1)xxx['ddd']=1,不必再遍历
要取得整个序列也很方便,for(var i in xxx)trace(i+'='+xxx[i])

让高手见笑了 IT资讯之家 www.it55.com


回帖一:
这个做法实在事太好了!思想不错,完全可以避免数组历遍。
在flash里面完全适用,如果对于c++这些需要数组预定义的
语言的话,就要改一下了。不过思想方面应该继承。 
佩服佩服
回帖二:
能用object的“键-值”查询的地方当然应该尽量使用,flash里的数组实在太慢了。
一个最有说服力的例子就是,如果要遍历一个数组,比如给所有的项赋值,在没有操作顺序的要求下,用for(...in...)要比for(...;...;...)快的多。这就是因为for in在flash执行的时候采用的是先建立“键-值”枚举表,然后再循环的缘故。
回帖三:
如果插入的是字符串的话,这个方法最好了
不过如果插入的是数字的话,连标标签也用不到
例如插入一个数num
直接if(xxx[num]==1)就行了
利用了flash中数组可以不连续赋值,没被赋值地元素为undefined这一特性
嗬嗬,其实道理和时间复杂度都是一样的
不过不知道这样会不会使空间复杂度增大?

45398 www.it55.com it55学习IT知识,享受IT生活 4dfkjn

原贴地址:http://www.blueidea.com/bbs/NewsDetail.asp?id=1057820

(阅读次数:

返回顶部
共2页: 上一页 1 [2] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]

最新文章