返回织梦建站服务网首页 业界新闻 教程文档 资源下载 酷站鉴赏 免费服务 站长工具
织梦建站工作室
织梦建站论坛
载入中…
专题栏目
最新热门
>>更多热门...  
最新推荐
>>更多推荐...  
  您现在的位置: 织梦建站服务网 >> 建站教程 >> WEB多媒体 >> Flash >> 教程正文
讨论——关于Flash 程序的优化            
HITS: TIME:2007-4-27 9:50:47 AUTHOR:佚名 URL:蓝色理想
CONTENT INTRODUCE :
放大文字  缩小文字  发表评论  加入站内收藏夹  告诉好友  打印模式  关闭窗口 

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

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

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

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

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


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

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

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

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

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


回帖一:果然...........+比-慢呢
(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个判断由上到下越来越慢;
---------------------------
另外理论上,(我没在flash试验过),
z++ , ++z , z=z+1 这三种操作,
前两种基本上没有速度的差别,而最后一种最慢.

原贴地址:http://www.blueidea.com/bbs/NewsDetail.asp?id=1057820
仍在讨论中,敬请关注.

讨论三:循环差不多了吧,程序的优化不仅仅是循环哦
在从一个序列、集合里剔除重复的工作,大家都有什么技巧呢?
比如要往一个序列里添加内容,但是又不可以是这个序列里已经有的,也就是说保证这个序列里的内容是不重复的,
最常见的是数组,加入很方便,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])

让高手见笑了


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

原贴地址:http://www.blueidea.com/bbs/NewsDetail.asp?id=1057820
仍在讨论中,敬请关注.

教程录入:jerome    责任编辑:jerome 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

    相关教程
    浅谈flash web的结构
    A*寻路,二叉堆优化及AS3实现
    Apollo是危险的吗?
    Apollo 开发技巧
    APOLLO 未来畅想
    Flash纯脚本生成饼图
    基于flash的360虚拟现实引擎实现
    XML动态菜单
    Flash破解与加密
    Flash AS2 中的拍照图片无损压缩
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    湘ICP备05010790号 {$Wap}
    关于我们 | 版本历史 | 联系方法 | 隐私条例 | 链接我们 | 广告服务 | 常见问题 | 友情链接 | 网站公告 | 设为首页 | 收藏本站
    Copyright © 2001-2006 17zm.NET All Rights Reserved.  织梦建站工作室[织梦建站工作室]™荣誉出品. Since 2001