当前位置: 首页 > 图文教程 > Flash动画 > ActionScript > 代码最优化实例

ActionScript
Flash AS实例:制作切换菜单动画
Flash AS3实例教程:简单的转动的星星
Flash AS3实例教程:制作旋转的菜单动画
项目中使用发布swc时遇到两个问题
Flash AS3教程:随图片大小而动态改变的图框
Flash AS3教程:创建好看的遮罩动画效果
Flash AS3.0教程:制作老鹰飞动实例
Flash as入门(6):文本与字符串
Flash as入门(8):加载和卸载swf文件
Flash as入门(17):Math类三角函数
Flash AS3实例教程:连锁反应的粒子动画
AS3实例教程:结合基本的动画和AS3绘图API
学习AS3知识:常用的8个AS3小技巧
Flash AS3实例教程:漂亮的水纹动画
Flash AS3实现动画中音乐音量逐渐关闭
AS 3.0的TransitionManager类制作动画
AS3实例教程:制作数码下落的动画特效
AS3面试题:复杂算法的改进
AS3.0实例:鼠标感应发光的文字效果
Flex4教程:添加事件的3种方法

ActionScript 中的 代码最优化实例


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-30   浏览: 67 ::
收藏到网摘: n/a

  今天在公司,一同事问了我一个问题,我想写一个方法,当接收到任意长度整型数值的时候,我如何只保留首位,其他位全部置为0呢。我思考了几秒钟:你可以先把整型参数用String强类型转换,看看字符串的长度,这样你就能根据长度得到首位的数字,后面再根据长度补零就行了。这时他问道,可不可以不通过字符串转换,直接用整型来处理呢?于是我们开始研究:

第一种做法:

function encoder(num:int):int{
    var sNum:int = num;
    var count:int = 0;
    while(true){
        count++;
        sNum /= 10;
        if (sNum < 10){
            sNum = Math.floor(sNum);
            break;
        }
    }
    return decoder(sNum,count);
}
 
function decoder(num:int,step:int):int{
    var _num:int = num;
    for (var i:int = 0;i<step;i++){
        _num *= 10;
    }
    return _num;
}
经过测试,这种做法是没有问题的,但是这是不是最好的方法呢,当然不是,因为Math.floor()的原因肯定会导致
效率下降一部分,有办法替换么,其实很简单,直接用int()转换一下就行了。这样是最优做法么,当然还不是,看看下面这段代码:

第二种做法:

function encoder(num:int):int{
    var i:int=num;
    var j:int=1;
    while(i>10)
    {
        j*=10;
        i=num/j;
    }
    return i*j;
}
这段代码相信大家都能看懂,它的优化在哪呢?比之前少了一个循环,当然效率会大幅提升了。我们只需再添加一个变量作为被乘数,这样就减少了一个循环。这段代码基本已经是效率很高了,但其实如果你够细心的话,仍然可以再进行优化,就是这句:i=num/j;我们把它替换成i *= .1;为什么呢?因为在计算机内部,乘运算比除运算要快。让我们看一下测试结果吧:
(左边是乘运算,右边是除运算,单位:毫秒)
当循环100万次时:
1028  1070
1049  1065
1045  1063
1024  1074
当循环1000万次时:
10319  10784
10467  10625